StackPanel

90

Панель 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 также расширится, и кнопки растянутся, чтобы заполнить ее.

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>
Использование свойств компановки
Пройди тесты
Лучший чат для C# программистов