【问题标题】:Why does a WPF ComboBox height expand to fill a grid cell, but not in a StackPanel?为什么 WPF ComboBox 的高度会扩展以填充网格单元格,而不是在 StackPanel 中?
【发布时间】:2017-03-17 19:19:48
【问题描述】:

这是展开以填充整个 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 设置特定宽度,或者除了锁定宽度或高度之外还有更好的方法吗?

【问题讨论】:

    标签: wpf combobox


    【解决方案1】:

    Grid 和 StackPanel 的行为不同。

    默认情况下,控件的 Horizo​​ntalAlignment 和 VerticalAlignment 将是“Stretch”。实际上,Grid 的行为是将控件拉伸到整个单元格。但是,StackPanel 旨在将控件放在彼此下方(如果方向为垂直)。因此,在这种情况下,它忽略了“拉伸”垂直对齐。不过,它确实会跟随它进行 Horizo​​ntalAlignment。

    所以恐怕答案只是“StackPanel 就是这样工作的”。如果需要拉伸,则需要不同的控件,例如 Grid 或 UniformGrid。

    对于宽度,这取决于您的设计。通常你会使用 Margin、MinWidth 和 MaxWidth(或高度)的某种组合来获得你想要的外观。

    【讨论】:

    • 在我的情况下,我不想要垂直拉伸,而且只要我在网格中,它就会垂直拉伸,除非我使用 Height 属性设置限制它。但我宁愿不这样做,因为在我看来,它确定了一个可能更好地为运行时保持打开状态以设置为可用的最佳设置的属性。我很擅长“这就是它的工作原理”;我只需要知道发生了什么。感谢您确认我确实需要为宽度做出适当的设计决策。
    【解决方案2】:

    是什么导致 ComboBox 填充到上面第一个代码中的 Grid 单元格的高度?

    不同的面板有不同的特性。

    Grid 会拉伸其子元素以填充可用空间,而StackPanel 则不会。有关此问题的更多信息,请参阅以下问题。

    Why StackPanel does not stretch its children vertically?

    因此,在您的示例中,Grid 使StackPanel 本身填充了可用空间,但StackPanel 反过来又不会使ComboBox 填充其可用空间。

    您可以通过将StackPanelBackground 属性设置为某个画笔来确认这一点。然后你会看到这个画笔的颜色填满了Grid的整个单元格。

    【讨论】:

    • 这是一个很好的链接,可以解释 StackPanel 的更深层背景。我不会发现这一点,因为我是如何思考问题和措辞的。谢谢!
    【解决方案3】:

    除非我弄错了,否则我似乎在 StackPanel 上设置了单个边距,默认情况下,这会将所有 4 个边距同时设置为该值。这将防止它填充网格单元格

    【讨论】:

      【解决方案4】:

      因为StackPanelMeasureOverride 会将面板的渲染大小限制为渲染其子控件所需的最小值。

      在您的情况下,它会停止 ComboBox 填充单元格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 2018-07-05
        • 2023-04-04
        • 2010-10-18
        相关资源
        最近更新 更多