簡體   English   中英

為什么WPF ComboBox的高度會擴展以填充網格單元,而不是在StackPanel中填充?

[英]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的行為不同。

默認情況下,控件的Horizo​​ntalAlignment和VerticalAlignment將為“ Stretch”。 網格的行為的確是將控件擴展到整個單元。 但是,StackPanel設計為僅將控件置於彼此之間(如果Orientation為Vertical)。 因此,在這種情況下,它將忽略“拉伸” VerticalAlignment。 不過,它確實遵循了Horizo​​ntalAlignment。

因此,恐怕答案僅僅是“這就是StackPanel的工作方式”。 如果需要拉伸,則需要其他控件,例如Grid或UniformGrid。

對於寬度,這取決於您的設計。 通常,您會結合使用Margin,MinWidth和MaxWidth(或Height)以獲得所需的外觀。

是什么導致ComboBox填充到上面第一個代碼中的Grid單元格的高度?

不同的面板具有不同的特征。

Grid拉伸其子元素以填充可用空間,而StackPanel則不會。 請參考以下問題有關此的更多信息。

為什么StackPanel不能垂直拉伸其子級?

因此,在您的示例中, Grid使StackPanel本身填充了可用空間,但StackPanel卻沒有使ComboBox填充其可用空間。

您可以通過將StackPanelBackground屬性設置為某些畫筆來確認這一點。 然后,您將看到此筆刷的顏色充滿了Grid的整個單元。

除非我沒有記錯,否則似乎您在StackPanel上設置了一個單邊距,默認情況下,這會將所有4個邊距同時設置為該值。 這將防止其填充網格單元

因為StackPanelMeasureOverride會將面板的渲染大小限制為呈現其子控件所需的最小尺寸。

在您的情況下,它將停止ComboBox填充單元格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM