Подтвердить что ты не робот

WPF - установка HorizontalAlignment = растяжка в текстовое поле в StackPanel

Почему текстовое поле не растягивается, чтобы заполнить пространство в стеке? Это по дизайну? В сетке текстовое поле растягивается, как ожидалось.

4b9b3361

Ответ 1

Да, это по дизайну. StackPanel выделит пробел, который запрашивает TextBox. Если вы не установили ширину в TextBox, для ее текста потребуется только достаточно ширина.

Ответ 2

Ответ Кента кажется правильным.
Чтобы по-прежнему заставить переопределить поведение StackPanel, я думаю, вам нужно будет динамически вычислить - установить свойство Width содержащихся элементов или некорректное переопределение MeasureOverride. Я предпочел бы использовать другой менеджер/панель компоновки. Некоторые вещи я заметил.

  • Значение по умолчанию для свойств HorizontalAlignment и VerticalAlignment дочерних элементов Stretch (если вы не укажете его явно).
  • StackPanel будет растягивать элементы на основе значения свойства Orientation. Итак,

    • Ориентация = Горизонтальное означает, что все элементы будут вертикально растянуты до макс. Элементы проходят горизонтально.
    • Ориентация = Вертикальная означает, что все элементы будут растянуты по горизонтали до макс. Элементы перемещаются по вертикали.
  • Если явно не указано, ширина и высота дочерних элементов - NaN. Если вы укажете явное значение, StackPanel выполнит их по настройкам Horiz и Vert Alignment.
  • В самой папке StackPanel есть функция HorizontalAlignment и VerticalAlignment, которая добавляет еще один макет. Вы можете поэкспериментировать с этим .

StackPanel

Значение по умолчанию - растяжение для обоих Горизонтальное выравнивание и Вертикальное выравнивание содержимого, которое содержащихся в StackPanel.

HorizontalAlignment

Когда свойства Height и Width явно заданные на элементе, эти измерения имеют более высокий прецедент во время компоновки и отменит типичные эффекты настройки Горизонтальное выравнивание для растягивания.

Ответ 3

Мне нужно, чтобы элементы были равномерно распределены, но располагались вертикально.

Я использовал UniformGrid и установил для свойства Columns значение 1. (проверено с помощью TextBox, и оно растягивается так, как вы хотите)