WPF: Расширить TextBox доступной шириной, но НЕ его содержимым? - PullRequest
12 голосов
/ 06 декабря 2010

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

Большинство решений, которые я нашел, состоит в том, чтобы сделатьфиктивная граница и привязка к ее ActualWidth, но это хакерское решение для меня.Граничное решение также требует небольшого поля на границе, что совсем нехорошо.Установка его на низкое значение приведет к очень странному поведению пользовательского интерфейса.Не нравится это решение.Там должно быть лучше?Все, что я хочу, чтобы текстовое поле не расширялось с его содержанием.Это не должно быть так сложно.Пожалуйста, дайте мне знать, как это сделать.

РЕДАКТИРОВАТЬ:

Одна странная вещь, которую я заметил, заключается в том, что следующий код делает границу намного больше, чем она должна быть:

<Grid>
  <Border Name="dummy1" Background="Red" />
  <TextBox Text="23242342343555554234234444444444423423423432344444444" Width="{Binding ActualWidth, ElementName=dummy1}" />
</Grid>

Замена границы и порядка текстового поля делает рамку подходящей для текстового поля, но мне нужно наоборот.Как было сказано ранее, установка поля (на границе) по крайней мере на 0,5 заставляет его работать, но в результате получается немного странный пользовательский интерфейс.

Ответы [ 3 ]

3 голосов
/ 17 декабря 2014

Я использовал DockPanel, чтобы расширить доступное пространство. Вы также должны установить Margin:

<DockPanel>
   <TextBox Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DockPanel}, Path=ActualWidth}" Margin="1" />
</DockPanel>
2 голосов
/ 06 декабря 2010

HorizontalAlignment = Растяжение не помогает?Панели сетки AFAIK растягивают свои дочерние элементы до доступного пространства в своей ячейке, когда для их горизонтального выравнивания установлено значение Растянуть.

1 голос
/ 26 декабря 2011

Вы узнали, как решить эту проблему?

Ответ на вашу проблему с границей: вы должны поместить объект TextBox внутри границы.

    <Border Background="Red" Padding="3">
        <Button Content="Button" />
    </Border>
...