这是扩展以填充整个网格单元格的代码:
<ComboBox Grid.Column="3" Grid.Row="1" >
<ComboBoxItem>text1</ComboBoxItem>
<ComboBoxItem>text2</ComboBoxItem>
<ComboBoxItem>text3</ComboBoxItem>
<ComboBoxItem>text4</ComboBoxItem>
</ComboBox>
但是当我把它放在网格单元格内的堆栈面板中时,它不会扩展。
<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 和 StackPanel 的行为不同。
默认情况下,控件的水平对齐和垂直对齐将为"拉伸"。实际上,网格的行为是将控制扩展到整个单元。但是,StackPanel 旨在将控件放在彼此之下(如果方向为垂直(。因此,在这种情况下,它忽略了"拉伸"垂直对齐。不过,它确实遵循水平对齐。
所以恐怕答案很简单"这就是StackPanel的工作方式"。如果需要拉伸,则需要不同的控件,例如 Grid 或 UniformGrid。
对于宽度,这取决于您的设计。通常,您会使用边距,最小宽度和最大宽度(或高度(的某种组合来获得所需的外观。
不同的是什么导致组合框填充到上面第一个代码中网格单元格的高度?
面板具有不同的特性。
Grid
拉伸其子元素以填充可用空间,而StackPanel
则不拉伸。请参阅以下问题 有关此内容的更多信息。
为什么 StackPanel 不垂直拉伸其子项?
因此,在您的示例中,Grid
使StackPanel
本身填充可用空间,但StackPanel
反过来不会使ComboBox
填充其可用空间。
可以通过将StackPanel
的 Background
属性设置为某个画笔来确认这一点。然后,您将看到此画笔的颜色填充了Grid
的整个单元格。
除非我弄错了,否则我似乎已经在 StackPanel 上设置了一个单一的边距,默认情况下,这会将所有 4 个边距同时设置为该值。这将阻止它填充网格单元格
因为StackPanel
的MeasureOverride
会将面板的呈现大小限制为呈现其子控件所需的最小值。
在您的情况下,它会停止ComboBox
填充单元格。