Каков предназначенный способ сделать ярлык и текстовое поле бок о бок в WPF?

Я часто использую это:

<StackPanel>
  <StackPanel Orientation="Horizontal">
    <Label>Username:</Label>
    <TextBox />
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <Label>Password:</Label>
    <PasswordBox />
  </StackPanel>
</StackPanel>

Но это такой общий сценарий, я чувствую, что есть способ с меньшей разметкой.

Кроме того, есть ли влияние производительности на использование большого количества панелей стека?

Спасибо!

Ответ 1

Есть два основных способа сделать это: StackPanels и Определения сетки, а Grid не обеспечивает меньшую разметку, чем StackPanel. Мне лично нравится использовать Определения сетки намного больше. Некоторое время они используют, и время от времени я все еще использую StackPanel, но в целом они чувствуют себя намного более чистыми, когда вы им пользуетесь. Вот отличный учебник о том, как их использовать.

Ссылка, которая также может помочь, - WPF Grid Vs. StackPanel.

Ответ 2

Я не знаю почему, но я очень любил 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, которое по умолчанию true, добавив к нему последний добавленный остаток (мне нравится эта функция). Итак, в приведенных выше примерах TextBox заполнит оставшееся доступное горизонтальное пространство. (Вы можете легко отключить его, переключив его на false)

Надеюсь, что это поможет!

DockPanel документация

Ответ 3

В основном я предпочитаю Grid, если в форме должно присутствовать большое количество меток и текстовых полей, таких как элементы ввода данных или свойства сетки. Сетка обеспечивает гораздо большую мощность для управления столбцами width/height строк и изменение значения width/height в одном месте будет влиять на все строки.

Еще одно преимущество использования Grid - выравнивание, все метки и текстовые поля (или другие элементы управления) будут правильно выровнены. В случае Stackpanel или Dockpanel вам нужно будет явно установить wdth на каждую метку, чтобы правильно их выровнять.

Вы также можете использовать GridSplitter в Grid, который может быть очень полезен для элементов управления PropertGrid.

Если требуется только одна или две такие строки, а выравнивание не вызывает беспокойства, вы можете продолжить Dockpanel или Stackpanel.