Я буду часто использовать это:
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Username:</Label>
<TextBox />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Password:</Label>
<PasswordBox />
</StackPanel>
</StackPanel>
Но это - такой общий сценарий, я чувствую, что существует путь с меньшим количеством разметки.
Кроме того, есть ли влияние производительности использования такого количества панелей стека?
Спасибо!
Есть два основных способа сделать это: StackPanels и Grid Definitions , а Grid
не обеспечивает меньшую разметку, чем StackPanel
]. Лично мне гораздо больше нравится использовать Grid Definitions . К ним нужно время, чтобы привыкнуть, и время от времени я все еще использую StackPanel
, но в целом они кажутся намного чище, когда вы к ним привыкаете. Вот отличный учебник о том, как их использовать.
Также может помочь ссылка WPF Grid Vs. StackPanel .
Не знаю почему, но мне очень понравились DockPanel
, и я использую их для сценария, который вы описали.
<DockPanel>
<Label Content="Username:"/>
<TextBox Text="Some Text"/>
</DockPanel>
Полное обозначение (и эквивалентная версия, поскольку позиция док-станции по умолчанию оставлена):
<DockPanel>
<Label DockPanel.Dock="Left" Content="Username:"/>
<TextBox DockPanel.Dock="Left" Text="Some Text"/>
</DockPanel>
Кроме того, у него есть свойство LastChildFill
, которое по умолчанию истинно
, что делает последнее добавлен дочерний элемент, заполняющий оставшееся место (мне нравится эта функция). Итак, в приведенных выше примерах TextBox
заполнит оставшееся доступное горизонтальное пространство. (Вы можете легко выключить его, переключив его на false)
Надеюсь, что это поможет !!
Я предпочитаю Grid
, если в форме должно присутствовать большое количество меток и текстовых полей, например, для ввода данных или элементов управления типа сетки свойств. Grid предоставляет гораздо больше возможностей для управления шириной
/высотой
столбцов строк, а изменение значения ширины
/высоты
в одном месте повлияет на все строки.
Еще одним преимуществом использования Grid
является выравнивание, все метки и текстовые поля (или другие элементы управления) будут выровнены правильно. В случае Stackpanel
или Dockpanel
вам придется явно задать ширину для каждой метки, чтобы выровнять их правильно.
Вы также можете использовать GridSplitter
в Grid, который может быть очень полезен в элементах управления типа PropertGrid.
В случае, если требуется только один или два таких ряда и выравнивание не является проблемой, вы можете использовать Dockpanel
или StackPanel
.