Опубликован: 13.12.2011 | Доступ: свободный | Студентов: 1021 / 34 | Оценка: 4.29 / 4.57 | Длительность: 13:56:00
Лекция 2:

Сведения о WPF и Silverlight: Введение и архитектура платформ

Архитектура WPF

Технология WPF использует многоуровневую архитектуру. На вершине ваше приложение взаимодействует с высокоуровневым набором служб, которые полностью написаны на управляемом коде С#. Действительная работа по трансляции объектов .NET в текстуры и треугольники Direct3D происходит "за кулисами", с использованием низкоуровневого неуправляемого компонента по имени milcore.dll. Библиотека milcore.dll реализована в неуправляемом коде потому, что ей требуется тесная интеграция с Direct3D, и вдобавок для нее чрезвычайно важна производительность.

На рис. 3.2 показаны уровни, на которых построена работа приложения WPF.

Архитектура WPF

Рис. 3.2. Архитектура WPF

Ниже описаны ключевые компоненты, присутствующие на рис. 3.2.

  • PresentationFramework (PresentationFramework.dll) содержит типы WPF верхнего уровня, включая те, что представляют окна, панели и прочие виды элементов управления. Также он реализует высокоуровневые программные абстракции, такие как стили. Большинство классов, которые вы будете использовать, находятся непосредственно в этой сборке.
  • PresentationCore (PresentationCore.dll) содержит базовые типы, такие как UIElement и Visual, от которых унаследованы все фигуры и элементы управления. Если вам не нужен полный уровень абстракции окон и элементов управления, можете опуститься ниже, на этот уровень, и продолжать пользоваться преимуществами механизма визуализации WPF.
  • Common Language Runtime (.NET Fx) а именно WindowsBase.dll — содержит еще более базовые ингредиенты, которые потенциально могут применяться вне WPF, такие как Dispatcher Object и Dependency Object, поддерживающие механизм свойств зависимости
  • MIL (milcore.dll) — ядро системы визуализации WPF и фундамент уровня медиа-интеграции (Media Integration Layer — MIL). Его составной механизм транслирует визуальные элементы в треугольники и текстуры, которых ожидает Direct3D. Хотя milcore.dll считается частью WPF, это также важнейший компонент операционных систем Windows Vista и Windows 7. В действительности DWM (Desktop Window Managerдиспетчер окон рабочего стола) использует milcore.dll для отображения рабочего стола.
  • Codecs (WindowsCodecs.dll) — низкоуровневый API-интерфейс, обеспечивающий поддержку изображений (например, обработку, отображение и масштабирование растровых изображений и файлов JPEG).
  • DirectХ (Direct3D) — низкоуровневый API-интерфейс, через который визуализируется вся графика в WPF.
  • User32 используется для определения того, какое место на экране к какой программе относится. В результате он по-прежнему вовлечен в WPF, но не участвует в визуализации распространенных элементов управления.

Наиболее важный факт, который потребуется осознать, состоит в том, что Direct3D визуализирует все рисование в WPF. При этом не важно, установлена на компьютере видеокарта со скромными возможностями или же более мощная, используются базовые элементы управления или рисуется более сложное содержимое, запускается приложение в Windows ХР, Windows Vista или Windows 7. Даже двумерные фигуры и обычный текст трансформируются в треугольники и проходят по трехмерному конвейеру. Какие-либо обращения к GDI или User32 отсутствуют.

Иерархия классов

На рис. 3.3 показан базовый обзор некоторых ключевых ветвей иерархии классов.

Ключевые ветви иерархии классов WPF

Рис. 3.3. Ключевые ветви иерархии классов WPF
Dispatcher Object

Приложения WPF используют знакомую однопоточную модель (single-thread affinitySTA), а это означает, что весь пользовательский интерфейс принадлежит единственному потоку. Будучи унаследованным от DispatcherObject, каждый элемент пользовательского интерфейса может удостовериться, выполняется ли код в правильном потоке, и обратиться к диспетчеру, чтобы направить код в поток пользовательского интерфейса.

Dependency Object

В WPF центральный путь взаимодействия с экранными элементами пролегает через свойства. За счет наследования от DependencyObject, классы WPF получают поддержку свойств зависимости.

Visual

Каждый элемент, появляющийся в WPF, в основе своей является Visual. Класс Visual можно воспринимать как единственный объект рисования, инкапсулирующий в себе инструкции рисования, дополнительные подробности рисования и базовую функциональность.

UI Element

Класс UIElement добавляет поддержку таких сущностей WPF, как компоновка (layout), ввод (input), фокус (focus) и события (events) — все, что команда разработчиков WPF называет аббревиатурой LIFE. Здесь же щелчки кнопками мыши и нажатия клавиш трансформируются в более удобные события, такие как MouseEnter.

Framework Element

Класс FrameworkElement — конечный пункт в центральном дереве наследования WPF. UIElement устанавливает фундамент для системы компоновки WPF, но FrameworkElement включает ключевые свойства (HorizontalAlignment и Margin), которые поддерживают его.

Shape

От этого класса наследуются базовые фигуры, такие как Rectangle, Polygon, Ellipse, Line и Path. Эти фигуры могут использоваться наряду с более традиционными графическими элементами Windows вроде кнопок и текстовых полей.

Control

Элемент управления (control) — это элемент, который может взаимодействовать с пользователем. К нему очевидным образом относятся такие классы, как Text Box, Button и ListBox.

Content Control

Это базовый класс для всех элементов управления, которые имеют отдельный фрагмент содержимого. Сюда относится все — от скромной метки Label до окна Window.

ItemsControl

Это базовый класс для всех элементов управления, которые отображают коллекцию каких-то единиц информации, вроде ListBox и TreeView.

Panel

Это базовый класс для всех контейнеров компоновки — элементов, которые содержат в себе один или более дочерних элементов и упорядочивают их в соответствии с определенными правилами компоновки.