Контейнер DockPanel позволяет прижимать элементы управления к какой либо стороне контейнера.
Свойства контейнера DockPanel
Контейнер DockPanel предоставляет нам следующие свойства для размещения элементов:
| Свойство | Тип | Описание |
Dock |
Dock |
Определяет границу контейнера к которой необходимо «прижимать» конкретный элемент из коллекции Children |
| LastChildFill | bool | Значение, указывающее, растягивается ли последний дочерний элемент в DockPanel, чтобы заполнить оставшееся доступное пространство |
Пример использования DockPanel
Ниже представлен пример использования контейнера DockPanel с расположенными в нём пятью кнопками.
<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="275" Width="400">
<DockPanel>
<Button DockPanel.Dock="Top" Content="Top" Background="Red"/>
<Button DockPanel.Dock="Bottom" Content="Bottom" Background="Blue"/>
<Button DockPanel.Dock="Right" Content="Bottom" Background="Green"/>
<Button DockPanel.Dock="Left" Content="Bottom" Background="Yellow"/>
<Button DockPanel.Dock="Left" Content="Bottom" Background="Violet"/>
</DockPanel>
</Window>
Результатом такого кода XAML будет следующий внешний вид приложения:
Здесь стоит обратить внимание на следующие моменты:
- Для элементов, у которых не установлено свойство
Height, но установлено свойствоDockPanel.Dock="Top"илиDockPanel.Dock="Bottom"высота автоматически становится такой, чтобы отобразить то, что содержится в свойствеContent(в нашем случае — это обычный текст). - Для элементов у которых не установлено свойство
Width, но установлено свойствоDockPanel.Dock="Right"илиDockPanel.Dock="Left"ширина автоматически становится такой, чтобы отобразить содержимое свойстваContent, либо элемент старается занять всё доступное пространство в контейнере. Например, для желтой и розовой кнопки установлено одно и то же значение свойстваDockPanel.Dock="Left". Так как у этих элементов не установлено свойствоWidth, то для желтой кнопки размер подобран так, чтобы отобразить текст, а розовая занимает всё оставшееся доступное место в контейнере.
Свойство LastChildFill
Это свойство DockPanel принимает значение True/False и указывает должен ли последний элемент занимать всё оставшееся доступное пространство или нет. Значение по умолчанию — True. Исходя из этого, мы могли бы составить исходный код примера выше следующим образом:
<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="275" Width="400">
<DockPanel LastChildFill="True">
<Button DockPanel.Dock="Top" Content="Top" Background="Red"/>
<Button DockPanel.Dock="Bottom" Content="Bottom" Background="Blue"/>
<Button DockPanel.Dock="Right" Content="Right" Background="Green"/>
<Button DockPanel.Dock="Left" Content="Left" Background="Yellow"/>
<Button Content="Left" Background="Pink"/>
</DockPanel>
</Window>
Как можно видеть, у последней кнопки отсутствует значение свойства DockPanel.Dock. Тем не менее, результат будет тот же, что и на рисунке выше. Если же у DockPanel установить свойство LastChildFill="False", то результат будет следующим:
Итого
Контейнер WPF DockPanel позволяет «прижимать» содержимое к определенным краям контейнера. Этот контейнер удобно использовать для создания стандартных интерфейсов приложений где верхняя часть занимается какими-либо меню, нижняя — используется для второстепенных функций, а центр — содержит полезный контент.

