WPF - setting HorizontalAlignment= Stretch to Textbox in StackPanel

后端 未结 3 1754
一向
一向 2021-02-19 08:20

Why doesn\'t a textbox stretch to fill space in a stackpanel? Is this by design? In a grid, the textbox stretches as expected.

相关标签:
3条回答
  • 2021-02-19 08:24

    Yes, it's by design. The StackPanel will allocate the space the TextBox asks for. If you haven't set a width on the TextBox, it will require only enough width to fit its text.

    0 讨论(0)
  • 2021-02-19 08:34

    Kent's answer seems right.
    To still force override the StackPanel behavior, I think you'd need to dynamically compute-set the Width property of the contained elements OR some funky override of MeasureOverride. I'd rather use another layout manager/panel. Some things I noted..

    • The default value for HorizontalAlignment and VerticalAlignment properties of child elements is Stretch (if you don't specify one explicitly).
    • The StackPanel will stretch elements based on its Orientation property value. So

      • Orientation=Horizontal means all elements will be vertically stretched to max. Elements flow horizontally.
      • Orientation=Vertical means all elements will be horiz stretched to max. Elements flow vertically.
    • Unless explicitly specified, Width and Height of child elements are NaN. If you specify an explicit value, StackPanel will honor them over the Horiz and Vert Alignment settings.
    • The StackPanel itself has HorizontalAlignment and VerticalAlignment that adds a further layout twist. You can experiment with this example.

    StackPanel

    The default value is stretch for both HorizontalAlignment and VerticalAlignment of content that is contained in a StackPanel.

    HorizontalAlignment

    When Height and Width properties are explicitly set on an element, these measurements take higher precedent during layout and will cancel the typical effects of setting HorizontalAlignment to Stretch.

    0 讨论(0)
  • 2021-02-19 08:38

    I needed items to be sized evenly, but stacked vertically.

    I used a UniformGrid, and set the Columns property to 1. (tested with a TextBox, and it stretches like you want)

    0 讨论(0)
提交回复
热议问题