Table of Contents

Панели

Сетка из двух строк: Name с текстовым полем, Difficulty с полем со списком, где выбрано Normal

Панели располагают другие элементы. StackPanel ставит дочерние элементы друг за другом, в столбец или в ряд. Grid размещает их по строкам и столбцам — это подходит для форм и компоновки HUD.

Разметка

<!-- Grid places children in rows and columns; StackPanel stacks them. -->
<Grid Width="300">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
  </Grid.RowDefinitions>
  <TextBlock Grid.Row="0" Grid.Column="0" Margin="0,0,12,8">Name</TextBlock>
  <TextBox Grid.Row="0" Grid.Column="1" Margin="0,0,0,8" Text="{Binding PlayerName}" />
  <TextBlock Grid.Row="1" Grid.Column="0" Margin="0,0,12,0">Difficulty</TextBlock>
  <ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Difficulties}" SelectedIndex="1" />
</Grid>

Grid.Row и Grid.Column — присоединённые свойства: каждый дочерний элемент указывает, в какой ячейке он стоит.

Основные свойства

Свойство Описание
Orientation Vertical (столбец) или Horizontal (ряд).
ColumnDefinitions / RowDefinitions Столбцы и строки, у каждого свой размер.

Width столбца или Height строки — одно из:

  • Auto: по размеру содержимого;
  • число: столько пикселей;
  • *: доля оставшегося места. 2* получает вдвое большую долю, чем *.

События и команды

Собственных событий у панелей нет.

Стиль

Сами панели ничего не рисуют, если не задать им Background. Для промежутков используйте Margin у дочерних элементов.

Клавиатура, геймпад и сенсорный ввод

Панели не принимают фокус. Стрелки и крестовина геймпада перемещают фокус между элементами внутри — к ближайшему в нажатом направлении.

StackPanel

Дочерние элементы сохраняют свой размер вдоль направления укладки и по умолчанию растягиваются поперёк него (кнопка в столбце остаётся по центру: кнопки принимают размер содержимого).

Grid

Дочерний элемент может занимать несколько ячеек — задайте Grid.RowSpan и Grid.ColumnSpan.

См. также