【发布时间】:2014-09-04 14:58:35
【问题描述】:
我有一个垂直 WarpPanel,它在运行时填充了控件。控件的类型和数量在运行时确定。它适用于具有固定高度的控件,但根据其内容扩展的控件(例如列表框)通常会创建一个新列。我需要以某种方式强制面板将控件放置在最后一列中,作为另一个固定高度控件,除非列中的可用空间小于我们尝试放置的控件的 MinHeight。不能为控件设置 Height 或 MaxHeight。
下图演示了这个问题。两个列表框的宽度相同,但不是将它们放在同一列中,而是其中一个最终变成了一半不可见。
我希望得到这个:
有没有办法在不制作/使用自定义面板的情况下实现这一点?
代码:
**Panel:**
<WrapPanel x:Name="wp" Orientation="Vertical">
**Adding controls:**
private void AddControl(bool isListBox)
{
if (isListBox)
{
var lb = new ListBox();
lb.MinHeight = 310;
lb.Width = 310;
lb.MaxWidth = 310;
lb.MinWidth = 310;
wp.Children.Add(lb);
}
else
{
var cb = new ComboBox();
cb.Width = 310;
cb.MaxWidth = 310;
wp.Children.Add(cb);
}
}
【问题讨论】:
-
能否包含代码,这将有助于了解子控件的对齐属性的方向和值。
-
有没有办法在不制作/使用自定义面板的情况下实现这一点?...不,没有,因为您的要求非常具体。但是,创建自定义
Panel比您想象的要容易得多……只有两种方法可以覆盖:How to create a Custom Layout Panel in WPF。