WPF - установка HorizontalAlignment = Stretch to Textbox в StackPanel - PullRequest
13 голосов
/ 02 января 2009

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

Ответы [ 3 ]

11 голосов
/ 02 января 2009

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

7 голосов
/ 02 января 2009

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

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

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

StackPanel

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

HorizontalAlignment

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

4 голосов
/ 02 ноября 2009

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

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

...