[英]Why does a WPF ComboBox height expand to fill a grid cell, but not in a StackPanel?
这是扩展为填充整个Grid单元格的代码:
<ComboBox Grid.Column="3" Grid.Row="1" >
<ComboBoxItem>text1</ComboBoxItem>
<ComboBoxItem>text2</ComboBoxItem>
<ComboBoxItem>text3</ComboBoxItem>
<ComboBoxItem>text4</ComboBoxItem>
</ComboBox>
但是,当我将其放在Grid单元内的StackPanel中时,它不会扩展。
<StackPanel Grid.Column="3" Grid.Row="1" Margin="10">
<ComboBox>
<ComboBoxItem>text1</ComboBoxItem>
<ComboBoxItem>text2</ComboBoxItem>
<ComboBoxItem>text3</ComboBoxItem>
<ComboBoxItem>text4</ComboBoxItem>
</ComboBox>
</StackPanel>
是什么导致ComboBox填充到上面第一个代码中的Grid单元格的高度?
作为后续措施,我们通常是否必须为ComboBox设置特定的宽度,或者除了将宽度或高度锁定为较低以外,还有其他更好的方法吗?
Grid和StackPanel的行为不同。
默认情况下,控件的HorizontalAlignment和VerticalAlignment将为“ Stretch”。 网格的行为的确是将控件扩展到整个单元。 但是,StackPanel设计为仅将控件置于彼此之间(如果Orientation为Vertical)。 因此,在这种情况下,它将忽略“拉伸” VerticalAlignment。 不过,它确实遵循了HorizontalAlignment。
因此,恐怕答案仅仅是“这就是StackPanel的工作方式”。 如果需要拉伸,则需要其他控件,例如Grid或UniformGrid。
对于宽度,这取决于您的设计。 通常,您会结合使用Margin,MinWidth和MaxWidth(或Height)以获得所需的外观。
是什么导致ComboBox填充到上面第一个代码中的Grid单元格的高度?
不同的面板具有不同的特征。
Grid
拉伸其子元素以填充可用空间,而StackPanel
则不会。 请参考以下问题有关此的更多信息。
因此,在您的示例中, Grid
使StackPanel
本身填充了可用空间,但StackPanel
却没有使ComboBox
填充其可用空间。
您可以通过将StackPanel
的Background
属性设置为某些画笔来确认这一点。 然后,您将看到此笔刷的颜色充满了Grid
的整个单元。
除非我没有记错,否则似乎您在StackPanel上设置了一个单边距,默认情况下,这会将所有4个边距同时设置为该值。 这将防止其填充网格单元
因为StackPanel
的MeasureOverride
会将面板的渲染大小限制为呈现其子控件所需的最小尺寸。
在您的情况下,它将停止ComboBox
填充单元格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.