Панели

Панели располагают другие элементы. 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.
См. также
- Прокрутка — для содержимого больше панели.