TextBox должен занимать доступное пространство и не увеличиваться при заполнении текстом - PullRequest
1 голос
/ 15 сентября 2011

У меня есть Сетка с двумя столбцами и двумя строками.В первом столбце первой строки у меня есть это:

<StackPanel  Orientation="Vertical" HorizontalAlignment="Stretch" Grid.ColumnSpan="1" Grid.Row="0" Grid.Column="0">
    <StackPanel  Orientation="Horizontal" Height="25" HorizontalAlignment="Stretch">
        <Label Content="Text:"/>
        <TextBox Name="TB_Text" HorizontalAlignment="Stretch" MinWidth="120" />
        <Button Name="BT_TextApply" Content="Apply" Width="75" HorizontalAlignment="Right" Click="BT_TextApply_Click" />
    </StackPanel>
</StackPanel>

У меня есть «строки» (горизонтальные стековые панели внутри вертикальной стековой панели), состоящие из метки, текстового поля и кнопки, которая принадлежит друг другу.

StackPanels получили атрибут HorizontalAlignment="Stretch", так что они используют все пространство в своей ячейке таблицы, это нормально.

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

Текущее поведение

  • Метка не имеет ширины, она занимает пространство, которое занимает текст в content нуждается, на данный момент это нормально.
  • Текстовое поле имеет минимальную ширину и становится больше, когда я заполняю его текстом,
  • кнопка находится справа от текстового поля и перемещаетсявправо, когда TextBox становится больше и исчезает при его перемещении за пределы StackPanel

Требуемое поведение

  • Метка не имеет ширины, которую она занимаетпространство, которое тxt в content нуждается, на данный момент это нормально.
  • Кнопка должна иметь фиксированную ширину (без проблем) и должна придерживаться правой границы моей StackPanel, это не работает
  • TextBox должен использовать оставшееся пространство между ними и не больше, даже если он заполнен большим количеством текста, чем умещается.

Есть ли что-то вроде атрибута "max" для моего TextBox, зависит отразмер StackPanel?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2011

Спасибо, Stema. У меня не было времени попробовать, поэтому я не был уверен, сработает ли это или нет.

Вместо StackPanel, вы пытались использовать DockPanel с последней дочерней заливкой, установленной в true? Если прикрепить ярлык влево, а кнопку вправо. Затем убедитесь, что текстовое поле является последним дочерним элементом панели док-станции, и я думаю, что размер текстового поля заполнит оставшееся пространство, если его HorizontalAlignment установлен на растяжение.

0 голосов
/ 16 сентября 2011

Для полноты вот решение, которое я придумал, используя ответ Джоша:

<StackPanel  Orientation="Vertical" HorizontalAlignment="Stretch" Grid.ColumnSpan="1" Grid.Row="0" Grid.Column="0">
    <DockPanel  Height="25" HorizontalAlignment="Stretch" LastChildFill="True">
        <Label Content="Text:" DockPanel.Dock="Left"/>
        <Button Name="BT_TextApply" Content="Apply" Width="75" DockPanel.Dock="Right" Click="BT_TextApply_Click" />
        <TextBox Name="TB_Text"/>
    </DockPanel>
</StackPanel>

Важные части: DockPanel нужен атрибут LastChildFill="True", затем перечислите элементы в DockPanel, которыедолжен где-то "пристыковаться" и попросить их пристыковать DockPanel.Dock="Left" и DockPanel.Dock="Right" и, как последний элемент, поместить тот, который должен занимать оставшееся место.(Атрибут HorizontalAlignment="Stretch", похоже, не нужен для последнего элемента, я не вижу разницы, есть он или нет.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...