WPF - setting HorizontalAlignment= Stretch to Textbox in StackPanel WPF - setting HorizontalAlignment= Stretch to Textbox in StackPanel wpf wpf

WPF - setting HorizontalAlignment= Stretch to Textbox in StackPanel


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.


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.


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)