
- •Глава 6. Проектирование модуля рисования
- •6.1. Основа wpf Windows Presentation Foundation (wpf) — это библиотека для создания пользовательских интерфейсов для интеллектуальных клиентских приложений.
- •6.1.1.Архитектура wpf
- •6.1.2. Иерархия классов
- •6.2. Особенности xaml
- •Определение MainWindow в xaml
- •Пространства имен xaml
- •Метод InitializeComponent()
- •Именование элементов
- •6.2.1. Компоновка
- •Понятие компоновки в wpf
- •Контейнеры компоновки
- •Свойства компоновки
- •WrapPanel
- •DockPanel
- •Настройка Grid
- •GridSplitter - разделенные окна
- •6.3.Canvas
- •Z-порядок
- •6.4. Построение приложения wpf с использованием Visual Studio 2008
- •6.4.1.Проектирование графического интерфейсного окна
Контейнеры компоновки
Все контейнеры компоновки WPF являются панелями, которые унаследованы от абстрактного класса System.Windows.Controls.Panel. Пространство имен System.Windows.Controls предлагает многочисленные панели, каждая из которых по-своему обслуживает внутренние элементы.
Рис.6.4.Панели компоновки
В одних панелях допускается помещать другие панели (вроде DockPanel, которая содержит StackPanel с другими элементами), чтобы обеспечить еще более высокую гибкость и степень управления.
Класс Panel добавляет небольшой набор членов, включая три общедоступных свойства, описанные ниже:
Background
Кисть, используемая для рисования фона панели. Чтобы принимать события мыши, это свойство должно быть установлено в отличное от null значение.
Children
Коллекция элементов, находящихся в панели. Это первый уровень элементов — другими словами, это элементы, которые сами могут содержать в себе другие элементы.
IsItemsHost
Булевское значение, которое равно true, если панель используется для отображения элементов, ассоциированных с ItemsControl (вроде узлов в TreeView или элементов списка ListBox).
Класс Panel также имеет внутренний механизм, который можно использовать при создании собственного контейнера компоновки. Но важнее то, что можно переопределить методы MeasureOverride()иArrangeOverride(), унаследованные от FrameworkElement, для изменения способа обработки панелью этапов измерения и расстановки при организации дочерних элементов.
Сам по себе базовый класс Panel — это не что иное, как начальная точка для построения других более специализированных классов. WPF предлагает набор производных от Panel классов, которые можно использовать для организации компоновки. Наиболее основные из них перечислены ниже. Как и все элементы управления WPF, а также большинство визуальных элементов, эти классы находятся в пространстве имен System.Windows.Controls:
StackPanel
Размещает элементы в горизонтальном или вертикальном стеке. Этот контейнер компоновки обычно используется в небольших разделах крупного и более сложного окна
WrapPanel
Размещает элементы в последовательностях строк с переносом. В горизонтальной ориентации WrapPanel располагает элементы в строке слева направо, затем переходит к следующей строке. В вертикальной ориентации WrapPanel располагает элементы сверху вниз, используя дополнительные колонки для дополнения оставшихся элементов
DockPanel
Выравнивает элементы по краю контейнера
Grid
Выстраивает элементы в строки и колонки невидимой таблицы. Это один из наиболее гибких и широко используемых контейнеров компоновки
UniformGrid
Помещает элементы в невидимую таблицу, устанавливая одинаковый размер для всех ячеек. Данный контейнер компоновки используется нечасто
Canvas
Позволяет элементам позиционироваться абсолютно — по фиксированным координатам. Этот контейнер компоновки более всего похож на традиционный компоновщик Windows Forms, но не предусматривает средств привязки и стыковки. Данный контейнер используется в модуле рисования.
Свойства компоновки
Хотя компоновка определяется контейнером, дочерние элементы тоже могут сказать свое слово. Панели компоновки взаимодействуют со своими дочерними элементами через небольшой набор свойств компоновки, перечисленных ниже:
HorizontalAlignment
Определяет позиционирование дочернего элемента внутри контейнера компоновки, когда имеется дополнительное пространство по горизонтали. Доступные значения: Center, Left, Right или Stretch
VerticalAlignment
Определяет позиционирование дочернего элемента внутри контейнера компоновки, когда имеется дополнительное пространство по вертикали. Доступные значения: Center, Top, Bottom или Stretch
Margin
Добавляет некоторое пространство вокруг элемента. Свойство Margin — это экземпляр структуры System.Windows.Thickness, с отдельными компонентами для верхней, нижней, левой и правой граней
MinWidth, MinHeight
Устанавливает минимальные размеры элемента. Если элемент слишком велик, чтобы поместиться в его контейнер компоновки, он будет усечен
MaxWidth, MaxHeight
Устанавливает максимальные размеры элемента. Если контейнер имеет свободное пространство, элемент не будет увеличен сверх указанных пределов, даже если свойства HonzontalAlignment и VerticalAlignment установлены в Stretch
Width, Height
Явно устанавливают размеры элемента. Эта установка переопределяет значение Stretch для свойств HorizontalAlignment и VerticalAlignment. Однако данный размер не будет установлен, если выходит за пределы, заданные в MinWidth, MinHeight, MaxWidth и MaxHeight
Все эти свойства унаследованы от базового класса FrameworkElement и потому поддерживаются всеми графическими элементами (виджетами), которые можно использовать в окне WPF.
Различные контейнеры компоновки могут предоставлять присоединенные свойства своим дочерним элементам. Например, все дочерние элементы объекта Grid получают свойства Row и Column, позволяющие им выбирать ячейку, в которой они должны разместиться. Присоединенные свойства позволяют устанавливать информацию, специфичную для определенного контейнера компоновки.