Содержание
Контейнер WPF StackPanel
используется для того, чтобы разместить все элементы управления в каком-то одном из двух измерений — по вертикали или по горизонтали.
Свойства StackPanel
Контейнер StackPanel предоставляет нам следующие свойства для позиционирования элементов управления:
Свойство | Тип | Описание |
Orientation |
Orientation |
Определяет измерение в котором располагаются все дочерние элементы. Может принимать следующие значения:
|
Пример использования StackPanel
По умолчанию, все элементы внутри StackPanel
располагаются вертикально сверху вниз. Например, ниже представлен код XAML в котором используется StackPanel
с расположенными внутри девятью элементами Border
:
<Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp2" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <StackPanel> <Border BorderBrush="Blue" BorderThickness="1" Background="Blue" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="White" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Red" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Yellow" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Green" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Aqua" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Black" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Brown" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="#FFCE2389" Width="200" Height="50"/> </StackPanel> </Window>
Чтобы поменять способ расстановки элементов внутри StackPanel
на горизонтальный, необходимо использовать свойство StackPanel
Orientation
:
<Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp2" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <StackPanel Orientation="Horizontal"> <Border BorderBrush="Blue" BorderThickness="1" Background="Blue" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="White" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Red" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Yellow" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Green" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Aqua" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Black" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="Brown" Width="200" Height="50"/> <Border BorderBrush="Blue" BorderThickness="1" Background="#FFCE2389" Width="200" Height="50"/> </StackPanel> </Window>
При этом, если элемент не умещается в строку, то он не переносится на новую — это следует учитывать при использовании StackPanel
. Например, представленный выше макет приложения будет выглядеть вот так:
Выравнивание элементов по горизонтали и вертикали
В рассмотренных выше примерах все элементы внутри StackPanel
располагались строго по центру. Для выравнивания элементов внутри контейнера используются свойства VerticalAlignment
и HorizontalAlignment
.
Свойство VerticalAlignment
Свойство VerticalAlignment
может принимать следующие значения: Bottom
, Center
, Stretch
и Top
. Несколько различных вариантов выравнивания элементов внутри StackPanel с использованием VerticalAlignment
представлены ниже:
StackPanel Orientation="Horizontal" VerticalAlignment="Center"
StackPanel Orientation="Horizontal" VerticalAlignment="Bottom"
StackPanel Orientation="Horizontal" VerticalAlignment="Top"
Свойство HorizontalAlignment
Свойство HorizontalAlignment
может принимать следующие значения: Center
, Left
, Right
, Stretch
. Несколько различных вариантов выравнивания элементов внутри StackPanel
с использованием HorizontalAlignment
представлены ниже:
StackPanel Orientation="Vertical" HorizontalAlignment="Center"
StackPanel Orientation="Vertical" HorizontalAlignment="Left"
StackPanel Orientation="Vertical" HorizontalAlignment="Right"
Упорядочивание элементов
При горизонтальной раскладке элементов в StackPanel
все элементы внутри контейнера располагаются слева на право. Например,
Чтобы поменять порядок расположения элементов внутри StackPanel
, используется свойство FlowDirection
, которое, по умолчанию имеет значение LeftToRight
. Если поменять значение этого свойства на значение RightToLeft
, то элементы внутри контейнера будут расположены в обратном порядке, то есть справа на лево:
StackPanel Orientation="Horizontal" FlowDirection="RightToLeft"
Итого
Компонент WPF StackPanel
— это контейнер, в котором элементы управления располагаются либо по горизонтали, либо по вертикали. Элементы могут выравниваться с использованием свойств VerticalAlignment
и HorizontalAlignment
. Для изменения порядка расположения элементов внутри StackPanel
используется свойство FlowDirection
.