StackPanel
90WPF --- Основа WPF --- StackPanel
Панель StackPanel — один из простейших контейнеров компоновки. Она просто укладывает свои дочерние элементы в одну строку или колонку. Например, рассмотрим следующее окно:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="StackPanel" Height="250" Width="400" Background="Gray">
<StackPanel>
<Label>Контактная информация</Label>
<Label>Логин: </Label>
<TextBox></TextBox>
<Label>Пароль: </Label>
<TextBox></TextBox>
<Button>Отправить</Button>
</StackPanel>
</Window>

По умолчанию панель StackPanel располагает элементы сверху вниз, устанавливая высоту каждого из них такой, которая необходима для отображения его содержимого. В данном примере это значит, что размер меток, текстовых полей и кнопок устанавливается достаточно большим для спокойного размещения текста внутри них. Все элементы растягиваются на полную ширину StackPanel, которая равна ширине окна. Если вы расширите окно, StackPanel также расширится, и кнопки растянутся, чтобы заполнить ее.
StackPanel может также использоваться для упорядочивания элементов в горизонтальном направлении за счет установки свойства Orientation:
<StackPanel Orientation="Horizontal">
Теперь элементы получают свою минимальную ширину (достаточную, чтобы уместить их текст) и растягиваются до полной высоты, чтобы заполнить содержащую их панель. В зависимости от текущего размера окна, это может привести к тому, что некоторые элементы не поместятся.
Свойства компоновки
Хотя компоновка определяется контейнером, дочерние элементы тоже могут сказать свое слово. Панели компоновки взаимодействуют со своими дочерними элементами через небольшой набор свойств компоновки, перечисленных ниже:
- HorizontalAlignment
Определяет позиционирование дочернего элемента внутри контейнера компоновки, когда имеется дополнительное пространство по горизонтали. Доступные значения: Center, Left, Right или Stretch
- VerticalAlignment
Определяет позиционирование дочернего элемента внутри контейнера компоновки, когда имеется дополнительное пространство по вертикали. Доступные значения: Center, Top, Bottom или Stretch
- Margin
Добавляет некоторое пространство вокруг элемента. Свойство Margin — это экземпляр структуры System.Windows.Thickness, с отдельными компонентами для верхней, нижней, левой и правой граней
- MinWidth, MinHeight
Устанавливает минимальные размеры элемента. Если элемент слишком велик, чтобы поместиться в его контейнер компоновки, он будет усечен
- MaxWidth, MaxHeight
Устанавливает максимальные размеры элемента. Если контейнер имеет свободное пространство, элемент не будет увеличен сверх указанных пределов, даже если свойства HonzontalAlignment и VerticalAlignment установлены в Stretch
- Width, Height
Явно устанавливают размеры элемента. Эта установка переопределяет значение Stretch для свойств HorizontalAlignment и VerticalAlignment. Однако данный размер не будет установлен, если выходит за пределы, заданные в MinWidth, MinHeight, MaxWidth и MaxHeight
Все эти свойства унаследованы от базового класса FrameworkElement и потому поддерживаются всеми графическими элементами (виджетами), которые можно использовать в окне WPF.
Как известно, различные контейнеры компоновки могут предоставлять присоединенные свойства своим дочерним элементам. Например, все дочерние элементы объекта Grid получают свойства Row и Column, позволяющие им выбирать ячейку, в которой они должны разместиться. Присоединенные свойства позволяют устанавливать информацию, специфичную для определенного контейнера компоновки.
Давайте модифицируем предыдущий пример:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="StackPanel" Height="220" Width="400" Background="Gray">
<StackPanel Margin="8">
<Label>Контактная информация</Label>
<Label>Логин: </Label>
<TextBox MaxWidth="250" MinWidth="150" HorizontalAlignment="Left"></TextBox>
<Label>Пароль: </Label>
<TextBox MaxWidth="250" MinWidth="150" HorizontalAlignment="Left"></TextBox>
<Button Margin="20" MaxWidth="120" HorizontalAlignment="Stretch" MinWidth="100" Content="Отправить"></Button>
</StackPanel>
</Window>
