这是扩展以填充整个网格单元格的代码:
<StackPanel Grid.Column="3" Grid.Row="1" Margin="10">
<ComboBox>
<ComboBoxItem>text1</ComboBoxItem>
<ComboBoxItem>text2</ComboBoxItem>
<ComboBoxItem>text3</ComboBoxItem>
<ComboBoxItem>text4</ComboBoxItem>
</ComboBox>
</StackPanel>
但是当我将它放在Grid单元格内的StackPanel中时,它不会扩展。
{{1}}
是什么原因导致ComboBox在上面的第一个代码中填充到网格单元格的高度?
作为一个跟进,我们通常要为ComboBox设置一个特定的宽度,还是除了锁定宽度或高度之外还有更好的方法吗?
答案 0 :(得分:2)
Grid和StackPanel的行为不同。
默认情况下,控件的HorizontalAlignment和VerticalAlignment将为“Stretch”。网格的行为实际上是将控制范围扩展到整个单元格。但是,StackPanel旨在将控件放在另一个之下(如果Orientation为Vertical)。因此,在这种情况下,它会忽略“拉伸”VerticalAlignment。但它确实遵循了HorizontalAlignment。
所以我担心答案就是“这就是StackPanel的工作原理”。如果你需要拉伸,你需要一个不同的控件,比如Grid或UniformGrid。
对于宽度,这取决于您的设计。通常你会使用Margin,MinWidth和MaxWidth(或Height)的某种组合来获得你想要的外观。
答案 1 :(得分:1)
是什么原因导致ComboBox在上面的第一个代码中填充到网格单元格的高度?
不同的面板具有不同的特征。
Grid
拉伸其子元素以填充可用空间,而StackPanel
则不会。请参考以下问题了解更多相关信息。
Why StackPanel does not stretch its children vertically?
因此,在您的示例中,Grid
会使StackPanel
本身填充可用空间,但StackPanel
反过来不会使ComboBox
填充其可用空间。
您可以通过将Background
的{{1}}属性设置为某个画笔来确认。然后,您将看到此画笔的颜色填充StackPanel
的整个单元格。
答案 2 :(得分:0)
除非我弄错了,否则我看来你在StackPanel上设置了一个奇异的边距,默认情况下,这会将所有4个边距同时设置为该值。这将阻止它填充网格单元格
答案 3 :(得分:0)
因为StackPanel
的{{1}}会将面板的渲染大小限制为渲染其子控件所需的最小值。
在您的情况下,它会停止MeasureOverride
填充单元格。