DockPanel

56

Панель DockPanel обеспечивает более интересный вариант компоновки. Эта панель растягивает элементы управления вдоль одной из внешних границ. Простейший способ представить это — вообразить панель инструментов, которая присутствует в верхней части многих Windows-приложений. Такие панели инструментов пристыковываются к верхней части окна. Как и в случае StackPanel, пристыкованные элементы должны выбрать один аспект компоновки.

Например, если вы хотите пристыковать кнопку к верхней части DockPanel, она растянется на всю ширину DockPanel, но получит высоту, которая ей понадобится (на основе своего содержимого и свойства MinHeight). С другой стороны, если пристыковать кнопку к левой стороне контейнера, ее высота будет растянута для заполнения контейнера, но ширина будет установлена по необходимости.

Возникает закономерный вопрос: каким образом дочерние элементы выбирают сторону для пристыковки? Ответ: через присоединенное свойство по имени Dock, которое может быть установлено в Left, Right, Тор или Bottom. Каждый элемент, помещаемый внутри DockPanel, автоматически получает это свойство.

<DockPanel>
        <Button DockPanel.Dock="Top" Background="LightGreen">TopButton</Button>
        <Button DockPanel.Dock="Bottom" Background="LightBlue">BottomButton</Button>
        <Button DockPanel.Dock="Left" Background="Aqua">LeftButton</Button>
        <Button DockPanel.Dock="Right" Background="Gold">RightButton</Button>
        <Button Background="LightCyan">Свободное пространство</Button>
</DockPanel>
DockPanel

Ясно, что при такой пристыковке элементов управления важен порядок. В данном примере верхняя и нижняя кнопки получают всю ширину DockPanel, поскольку они пристыкованы первыми. Когда затем стыкуются левая и правая кнопки, они помещаются между первыми двумя. Если поступить наоборот, то левая и правая кнопки получат полную высоту сторон панели, а верхняя и нижняя станут уже, потому что им придется размещаться между боковыми кнопками.

Можно пристыковать несколько элементов к одной стороне. В этом случае элементы просто выстраиваются вдоль этой стороны в том порядке, в котором они объявлены в разметке. И, если вам не нравится поведение в отношении растяжения и промежуточных пробелов, можете подкорректировать свойства Margin, HorizontalAlignment и VerticalAlignment, как делали это со StackPanel.

Пройди тесты
Лучший чат для C# программистов