В XAML как сказать:ширина и высота по умолчанию для, например,Текстовое поле

StackOverflow https://stackoverflow.com/questions/503233

Вопрос

Итак, я подхожу к WPF с точки зрения HTML.

Я просто хочу поставить TextBox на моем окне вот так:

<Grid>
    <TextBox Name="theName" />
</Grid>

Оказывается , что TextBox затем становится ОГРОМНЫМ, закрывает все окно.(!)

Хорошо, это не то, чего я хочу, но я также не хочу определять ТОЧНЫЙ размер, так как я знаю Height и Width должен быть гибким, поэтому я стараюсь:

<TextBox Name="theName" Width="Auto" Height="Auto"/>

То же самое.Поэтому я стараюсь:

<TextBox Name="theName" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch"/>

То же самое.Поэтому я просто жестко задаю размеры:

<TextBox Name="theName" Width="100" Height="20"/>

Что, как я знаю, не является хорошей практикой программирования в WPF.

Итак, что, как вы можете сказать TextBox чтобы "отображать размеры по умолчанию для используемого размера шрифта"?

Это было полезно?

Решение

Вы можете взять пример Брайана еще немного дальше.Указав конкретное выравнивание, которое не растягивает и дополнительно ограничивает текстовое поле, чтобы оно не расширялось за пределы определенного размера.например:

<Grid x:Name="LayoutRoot">
        <TextBox HorizontalAlignment="Left" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap" 
        MinWidth="15" MinHeight="20" MaxWidth="500" MaxHeight="50"/>
</Grid>

Вы можете пойти еще дальше, настроив строки / столбцы внутри сетки и ограничивая их различными способами.Поскольку вы исходите из HTML-фона, думайте об этом как об использовании таблицы для управления макетом.Помните, что вы также можете вложить другие объекты контейнера (т.е.Стековые панели, оберточные панели, другие Сетки и т.д.).

Проблема с XAML и элементами управления WPF / Silverlight заключается в том, что они очень гибкие, поэтому вы должны разобраться со всеми параметрами и тем, как они влияют на макет.

Удачи.Сейчас я переживаю точно то же самое.

Другие советы

Используйте другой контейнер.Сетка всегда растягивает свои дочерние элементы управления, чтобы заполнить ячейку сетки.

Вы могли бы использовать, напримерstackpanel, которая перемещает свои элементы управления только в одном направлении.

В дополнение к использованию другой панели, как упоминал Стефан, вы могли бы просто придать текстовому полю выравнивание, которое не является растянутым.например ,

<TextBox Name="theName" HorizontalAlignment="Left" VerticalAlignment="Top"/>

Размеры в WPF не являются пикселями, это "пиксели, не зависящие от устройства", которые составляют 1/96 дюйма - так что при сегодняшней обычной настройке DPI они соответствуют пикселям в соотношении 1: 1.

Но если вы запустите программу в режиме high DPI, текстовое поле будет увеличиваться вместе с DPI (и шрифтом).

Так что установка жестко заданного размера не так уж и плоха.

Кроме этого, вы можете использовать только HorizontalAlignment и VerticalAlignment, которые не являются "растягивающимися", это увеличит размер текстового поля в соответствии с содержимым, но тогда пустое текстовое поле будет крошечным.

Вы можете установить VerticalAlignment на "Center", "Top" или "Bottom", чтобы автоматически получать высоту примерно в одну строку (возможно, с поддержкой параметра minHeight, чтобы избежать проблем с действительно крошечными шрифтами), а затем установить ширину, чтобы ширина текстового поля не менялась по мере ввода текста пользователем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top