WPF - 在StackPanel中将水平对齐方式设置为Stretch以适应TextBox

15

为什么文本框在StackPanel中不能自动拉伸填充空间?这是故意的吗?在Grid控件中,文本框可以按预期自动拉伸。

3个回答

12

是的,这是设计如此。 StackPanel 会为 TextBox 请求的空间分配空间。如果您没有在 TextBox 上设置宽度,则它只需要足够的宽度来适应其文本。


9
肯特的回答似乎是正确的。
要强制覆盖 StackPanel 的行为,您需要动态计算设置包含元素的 Width 属性或某些奇怪的 MeasureOverride 覆盖。我宁愿使用另一个布局管理器 / 面板。我注意到了一些事情...

  • 如果您没有明确指定,子元素的 HorizontalAlignment 和 VerticalAlignment 属性的默认值是 Stretch。
  • StackPanel 将根据其 Orientation 属性值拉伸元素。那么

    • Orientation = Horizontal 意味着所有元素都将被垂直拉伸到最大。元素水平流动。
    • Orientation = Vertical 意味着所有元素都将被水平拉伸到最大。元素垂直流动。
    • 除非明确指定,否则子元素的宽度和高度为 NaN。如果指定显式值,则 StackPanel 将优先考虑它们而不是 Horiz 和 Vert 对齐设置。
    • StackPanel 本身具有添加进一步布局扭曲的 HorizontalAlignment 和 VerticalAlignment。您可以尝试这个 example

      StackPanel

      默认情况下,StackPanel 中包含的内容的 HorizontalAlignment 和 VerticalAlignment 都是 stretch。

      HorizontalAlignment

      当元素的 Height 和 Width 属性被显式设置时,在布局期间,这些测量值具有更高的优先级,并且将取消将 HorizontalAlignment 设置为 Stretch 的典型效果。


4

我需要将项目等大小地垂直堆叠。

我使用了UniformGrid,并将Columns属性设置为1。(使用TextBox测试,它会像您想要的那样拉伸)


这正是我需要的答案,解决了一个类似按钮布局问题。谢谢! - Christopher Currie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接