
- •Глава 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.Проектирование графического интерфейсного окна
6.1.2. Иерархия классов
Ниже показан базовый обзор некоторых ключевых ветвей иерархии классов(рис.6.2). Основные пространства имен WPF начинаются в System.Windows (например, System.Windows, System.Windows.Controls и System.Windows.Media). Единственным исключением являются пространства имен, начинающиеся с System.Windows.Forms, которые относятся к инструментам Windows Forms.
Рис.6.2.Иерархия классов в программе
System.Threading.DispatcherObject
Приложения WPF используют знакомую однопоточную модель (single-thread affinity — STA), а это означает, что весь пользовательский интерфейс принадлежит единственному потоку. Взаимодействовать с элементами пользовательского интерфейса из других потоков небезопасно. Чтобы содействовать работе этой модели, каждое WPF-приложение управляется диспетчером, координирующим сообщения (появляющиеся в результате клавиатурного ввода, перемещений курсора мыши и таких процессов платформы, как компоновка). Будучи унаследованным от DispatcherObject, каждый элемент пользовательского интерфейса может удостовериться, выполняется ли код в правильном потоке, и обратиться к диспетчеру, чтобы направить код в поток пользовательского интерфейса.
Этот тип включает одно свойство, представляющее интерес — Dispatcher, которое возвращает ассоциированный объект System.Windows.Threading.Dispatcher. Класс Dispatcher — это точка входа в очередь событий приложения WPF, предоставляющая базовые конструкции для работы с параллелизмом и многопоточностью.
System.Windows.DependencyObject
В WPF центральный путь взаимодействия с экранными элементами пролегает через свойства. На ранней стадии цикла проектирования архитекторы WPF решили создать более мощную модель свойств, которая положена в основу таких средств, как уведомления об изменениях, наследуемые значения по умолчанию и более экономичное хранилище свойств. Конечным результатом стало средство свойств зависимости (dependency property). За счет наследования от DependencyObject, классы WPF получают поддержку свойств зависимости.
Базовый класс DependencyObject предоставляет два ключевых метода для всех производных типов: GetValue() и SetValue(). С помощью этих членов можно устанавливать само свойство. Другие части инфраструктуры позволяют "регистрировать" тех, кто может использовать свойства зависимости или присоединяемые свойства.
Хотя свойства зависимости — это ключевой аспект разработки WPF, большую часть времени их детали скрыты от глаз.
System.Windows.Media.Visual
Каждый элемент, появляющийся в WPF, в основе своей является Visual. Класс Visual можно воспринимать как единственный объект рисования, инкапсулирующий в себе инструкции рисования, дополнительные подробности рисования (наподобие отсечения, прозрачности и настроек трансформации) и базовую функциональность (вроде проверки попадания). Класс Visual также обеспечивает связь между управляемыми библиотеками WPF и сборкой milcore.dll, которая визуализирует отображение. Любой класс, унаследованный от Visual, обладает способностью отображаться в окне. Применение типа Visual (и его потомков вроде DrawingVisual) обеспечивает наиболее легковесный способ визуализации графических данных, но также подразумевает участие большого объема управляемого кода для обеспечения работы всех необходимых служб.
System.Windows.UIElement
Класс UIElement добавляет поддержку таких сущностей WPF, как компоновка (layout),ввод (input),фокус (focus)исобытия (events)— все, что команда разработчиков WPF называет аббревиатурой LIFE. Например, именно здесь определен двухшаговый процесс измерения и организации компоновки. Здесь же щелчки кнопками мыши и нажатия клавиш трансформируются в более удобные события, такие как MouseEnter. Как и со свойствами, WPF реализует расширенную систему передачи событий, именуемуюмаршрутизируемыми событиями (routed events).
System.Windows.FrameworkElement
Класс FrameworkElement — конечный пункт в центральном дереве наследования WPF. Он реализует некоторые члены, которые просто определены в UIElement. Например, UIElement устанавливает фундамент для системы компоновки WPF, но FrameworkElement включает ключевые свойства (вроде HonzontalAlignment и Margin), которые поддерживают его. UIElement также добавляет поддержку привязки данных, анимации и стилей — все они являются центральными средствами.
System.Windows.Shapes.Shape
От этого класса наследуются базовые фигуры, такие как Rectangle, Polygon, Ellipse, Line и Path. Эти фигуры могут использоваться наряду с более традиционными графическими элементами Windows вроде кнопок и текстовых полей.
System.Windows.Controls.Control
Элемент управления (control) — это элемент, который может взаимодействовать с пользователем. К нему очевидным образом относятся такие классы, как TextBox, Button и ListBox. Класс Control добавляет дополнительные свойства для установки шрифта, а также цветов переднего плана и фона. Но наиболее интересная деталь, которую он предоставляет — это поддержка шаблонов, которая позволяет заменять стандартный внешний вид элемента управления собственным рисованием.
Control, так же, определяет свойства для установки размеров элемента управления, прозрачности, порядка обхода по нажатию клавиши <ТаЬ>, дисплейного курсора, цвета фона и т.д.
System.Windows.Controls.ContentControl
Это базовый класс для всех элементов управления, которые имеют отдельный фрагмент содержимого. Сюда относится все — от скромной метки Label до окна Window. Наиболее впечатляющая часть этой модели заключается в том, что единственный фрагмент содержимого может быть чем угодно — от обычной строки до панели компоновки, содержащей комбинацию других фигур и элементов управления.
Например, когда речь идет о типичном элементе управления "кнопка", то обычно предполагается, что его содержимым будет базовый строковый литерал (ОК, Cancel, Abort и т.п.). В случае использования XAML для описания элемента управления WPF, и значение, которое необходимо присвоить свойству Content, может быть выражено в виде простой строки, можете установить свойство Content внутри открывающего определения элемента.
System.Windows.Controls.ItemsControl
Это базовый класс для всех элементов управления, которые отображают коллекцию каких-то единиц информации, вроде ListBox и TreeView. Списочный элемент управления замечательно гибок; например, используя встроенные средства класса ItemsControl, можно трансформировать обычный ListBox в список переключателей, список флажков, упорядоченный набор картинок или комбинацию совершенно разных элементов по своему выбору. Фактически в WPF все меню, панели инструментов и линейки состояния на самом деле являются специализированными списками, и классы.
System.Windows.Controls.Panel
Это базовый класс для всех контейнеров компоновки — элементов, которые содержат в себе один или более дочерних элементов и упорядочивают их в соответствии с определенными правилами компоновки. Эти контейнеры образуют фундамент системы компоновки WPF, и их использование — ключ к упорядочиванию содержимого наиболее привлекательным и гибким способом.
Основные классы, используемые в программе:
System.Collections.Generic;
System.Text;
System.Windows;
System.Windows.Controls;
System.Windows.Data;
System.Windows.Documents;
System.Windows.Input;
System.Windows.Media;
System.Windows.Media.Imaging;
System.Windows.Shapes;
System.Globalization;
Microsoft.Win32;
System.Windows.Media.Effects;
System.Diagnostics;
DrawToolsLib;
Utilities;
System.Collections;
System.IO;