Этот контейнер прижимает свое содержимое к определенной стороне внешнего контейнера. Для этого у вложенных элементов надо установить сторону,
к которой они будут прижиматься с помощью свойства DockPanel.Dock
. Например,
<Window x:Class="LayoutApp.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:LayoutApp" mc:Ignorable="d" Title="DockPanel" Height="250" Width="300"> <DockPanel LastChildFill="True"> <Button DockPanel.Dock="Top" Background="AliceBlue" Content="Верхняя кнопка" /> <Button DockPanel.Dock="Bottom" Background="BlanchedAlmond" Content="Нижняя кнопка" /> <Button DockPanel.Dock="Left" Background="Aquamarine" Content="Левая кнопка" /> <Button DockPanel.Dock="Right" Background="DarkGreen" Content="Правая кнопка" /> <Button Background="LightGreen" Content="Центр" /> </DockPanel> </Window>
В итоге получаем массив кнопок, каждая из которых прижимается к определенной стороне элемента DockPanel:
Причем у последней кнопки мы можем не устанавливать свойство DockPanel.Dock
. Она уже заполняет все оставшееся пространство.
Такой эффект получается благодаря установке у DockPanel свойства LastChildFill="True"
, которое означает, что последний элемент заполняет все оставшееся место.
Если у этого свойства поменять True на False, то кнопка прижмется к левой стороне, заполнив только о место, которое ей необходимо.
Также обратите внимание на порядок прикрепления к кнопкам свойства DockPanel.Dock
. Например, если мы изменим порядок на:
<DockPanel LastChildFill="True"> <Button DockPanel.Dock="Top" Background="AliceBlue" Content="Верхняя кнопка" /> <Button DockPanel.Dock="Left" Background="Aquamarine" Content="Левая кнопка" /> <Button DockPanel.Dock="Right" Background="DarkGreen" Content="Правая кнопка" /> <Button DockPanel.Dock="Bottom" Background="BlanchedAlmond" Content="Нижняя кнопка" /> <Button Background="LightGreen" Content="Центр" /> </DockPanel>
В этом случае нижняя кнопка уже будет заполнять меньшее место.
Мы также можем прижать к одной стороне сразу несколько элементов. В этом случае они просто будут располагаться по порядку:
<DockPanel LastChildFill="True"> <Button DockPanel.Dock="Top" Background="AliceBlue" Content="Верхняя кнопка 1" /> <Button DockPanel.Dock="Top" Background="AliceBlue" Content="Верхняя кнопка 2" /> <Button DockPanel.Dock="Bottom" Background="BlanchedAlmond" Content="Нижняя кнопка" /> <Button DockPanel.Dock="Left" Background="Aquamarine" Content="Левая кнопка1" /> <Button DockPanel.Dock="Left" Background="Aquamarine" Content="Левая кнопка2" /> <Button DockPanel.Dock="Right" Background="DarkGreen" Content="Правая кнопка" /> <Button Background="LightGreen" Content="Центр" /> </DockPanel>
Контейнер DockPanel особенно удобно использовать для создания стандартных интерфейсов, где верхнюю и левую часть могут занимать какие-либо меню, нижнюю - строка состояния, правую - какая-то дополнительная информация, а в центре будет находиться основное содержание.