【发布时间】:2019-09-28 20:19:58
【问题描述】:
下面的 sn-p 产生这个结果:
<DockPanel Width="240">
<ComboBox HorizontalAlignment="Stretch">
<ComboBoxItem Content="A" />
<ComboBoxItem Content="B" />
<ComboBoxItem Content="C" />
</ComboBox>
</DockPanel>
正如我们所见,ComboBox 很好地填充了整个DockPanel 宽度,正如它应该的那样。
如果我们在ComboBox 之后添加以下StackPanel,我们会得到这个:
<StackPanel Orientation="Horizontal" Width="120" Visibility="Visible" Background="Aqua">
<TextBox Width="60" />
<TextBox Width="60" />
</StackPanel>
我们刚刚解决了第一个问题:ComboBox 不应该填充DockPanel 的其他 120 个像素吗,因为它是 HorizontalAlignment=Stretch 并且因为 StackPanel 使用其他 120 个像素?
至少,如果我们将 StackPanel.Visibility 变成 Hidden/Collapsed,我们会得到这样的:
当StackPanel.Visibility 是Hidden/Collapsed 时,如何使ComboBox 填充整个DockPanel.Width 水平方向,就像第一张图片一样?
所有控件都必须水平对齐,DockPanel 不是必须的。
【问题讨论】:
-
使用 Visibility.Collapsed 而不是 Hidden。
-
@DaveM 您是否尝试过使用您的解决方案运行示例?既不是隐藏作品,也不是折叠作品。
-
将组合框作为停靠面板中的最后一项(堆栈面板之后)并设置堆栈面板的 DockPanel.Dock="Right"
-
Dockpanel 看起来很方便。在实践中,让事情按预期工作可能很繁琐,而且布局可能很脆弱。网格更容易预测。