[英]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.