Встроенные контейнеры компоновки

Контейнер компоновки – это класс, реализующий определённую логику компоновки дочерних элементов. WPF предлагает ряд стандартных контейнеров, основные контейнерыперечислены в табл. 5.

Таблица 5

Основные контейнеры компоновки

Имя Описание
Canvas Позволяет элементам позиционироваться по фиксированным координатам
StackPanel Размещает элементы в горизонтальный или вертикальный стек. Этот контейнер обычно используется в небольших секциях сложного окна
WrapPanel Размещает элементы в сериях строк с переносом. Например, в горизонтальной ориентации WrapPanel располагает элементы в строке слева направо, затем переходит к следующей строке
DockPanel Выравнивает элементы по краю контейнера
Grid Встраивает элементы в строки и колонки невидимой таблицы

Все контейнеры компоновки WPF являются панелями, которые унаследованы от абстрактного класса System.Windows Встроенные контейнеры компоновки.Controls.Panel. Этот класс содержитнесколькополезных свойств:

· Background – кисть, используемая для рисования фона панели. Кисть нужно задать, если панель должна принимать события мыши (как вариант, это может быть прозрачная кисть).

· Children–коллекция элементов, находящихся в панели. Это первый уровень вложенности– другими словами, это элементы, которые сами могут содержать дочерние элементы.

· IsItemsHost–булево значение, равное true, если панель используется для показа элементов, ассоциированных с ItemsControl.

· ZIndex–присоединяемое свойство класса Panel, целое число для задания высоты визуального слоя элемента.Элементы с большим ZIndexвыводятся поверх элементов с меньшим значением.

Canvas – контейнер компоновки, реализующий «классическое» позиционирование элементов путём указания фиксированных координат. Для задания позиции элемента следует Встроенные контейнеры компоновки использовать присоединённые свойства Canvas.Left, Canvas.Right, Canvas.Top, Canvas.Buttom. Эти свойства определяют расстояние от соответствующей стороны Canvas до ближайшей грани элемента[5]. Использование контейнера Canvas демонстрируется в следующем примере:

Left=0, Top=0

Left=20, Top=20

Right=20, Bottom=20

Right=0, Bottom=0

Right=0, Top=0

Left=0, Bottom=0

Рис. 6. Кнопки в контейнереCanvas.

StackPanel– популярный контейнер компоновки, который размещает дочерние элементы последовательно, по мере их объявления в контейнере. StackPanelимеет единственное свойство для настройки. Свойство Orientation управляет направлением размещения дочерних элементов и принимает значения из одноимённого перечисления:Vertical (по умолчанию) или Horizontal.



Рис. 7. StackPanel с горизонтальной ориентацией.

WrapPanel – это контейнер компоновки, который во многом аналогичен Встроенные контейнеры компоновки StackPanel. ОднакоWrapPanel использует автоматический перенос элементов, для которых не хватает вертикального (горизонтального) пространства, в новый столбец (строку). WrapPanelподдерживает несколько свойств настройки:

· Orientation –свойство аналогично одноименному свойству уStackPanel, но по умолчанию использует значение Horizontal.

· ItemHeight – единая мера высоты для всех дочерних элементов. В рамках заданной единой высоты каждый дочерний элемент располагается в соответствие со своим свойством VerticalAlignment или усекается.

· ItemWidth – единая мера ширины для всех дочерних элементов. В рамках заданной единой ширины каждый дочерний элемент располагается в соответствие со своим свойством HorizontalAlignment или усекается.

По умолчанию, свойства ItemHeight и ItemWidth не заданы (имеют значение Double.NaN). В этой ситуации Встроенные контейнеры компоновки ширина столбца (высота строки) определяется по самому широкому (самому высокому) дочернему элементу.