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

WPF: расширьте TextBox доступной шириной, но НЕ по содержанию?

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

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

EDIT:

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

<DockPanel>
   <TextBox Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DockPanel}, Path=ActualWidth}" Margin="1" />
</DockPanel>

Ответ 3

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

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

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