В XAML как сказать: ширина и высота по умолчанию, например Текстовое окно - PullRequest
8 голосов
/ 02 февраля 2009

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

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

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

Оказывается, что TextBox тогда ОГРОМНО, охватывает все окно. (!)

Хорошо, это не то, что я хочу, но я также не хочу определять размер EXACT, поскольку знаю, что 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 "отображать размеры по умолчанию для используемого размера шрифта"?

Ответы [ 4 ]

8 голосов
/ 02 февраля 2009

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

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

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

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

Удачи. Сейчас я прохожу то же самое.

6 голосов
/ 02 февраля 2009

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

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

4 голосов
/ 02 февраля 2009

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

<TextBox Name="theName" HorizontalAlignment="Left" VerticalAlignment="Top"/>
1 голос
/ 02 февраля 2009

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

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

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

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

Вы можете установить VerticalAlignment на «Center», «Top» или «Bottom», чтобы получить автоматическую высоту около одной строки (возможно, с помощью параметра MinHeight, чтобы избежать проблем с очень мелкими шрифтами), а затем установить Width, чтобы TextBox ширина не меняется при вводе пользователем.

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