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

89

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

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

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

Ниже описаны ключевые компоненты архитектуры WPF:

PresentationFramework.dll

Содержит типы WPF верхнего уровня, включая те, что представляют окна, панели и прочие виды элементов управления. Также он реализует высокоуровневые программные абстракции, такие как стили. Большинство классов, которые вы будете использовать, находятся непосредственно в этой сборке.

PresentationCore.dll

Содержит базовые типы, такие как UIElement и Visual, от которых унаследованы все фигуры и элементы управления. Если вам не нужен полный уровень абстракции окон и элементов управления, можете опуститься ниже, на этот уровень, и продолжать пользоваться преимуществами механизма визуализации WPF.

WindowsBase.dll

Содержит еще более базовые ингредиенты, которые потенциально могут применяться вне WPF, такие как DispatcherObject и DependencyObject, поддерживающие механизм свойств зависимости.

milcore.dll

Ядро системы визуализации WPF и фундамент уровня медиаинтеграции (Media Integration Layer — MIL). Его составной механизм транслирует визуальные элементы в треугольники и текстуры, которых ожидает Direct3D. Хотя milcore.dll считается частью WPF, это также важнейший компонент операционных систем Windows Vista и Windows 7. В действительности DWM (Desktop Window Manager — диспетчер окон рабочего стола) использует milcore.dll для отображения рабочего стола.

Сбоpку milcore.dll иногда называют механизмом "управляемой графики". Подобно тому, как общеязыковая исполняющая среда (common language runtime — CLR) управляет жизненным циклом приложения .NET, milcore.dll управляет состоянием дисплея. И так же, как CLR избавляет от забот об освобождении объектов и восстановлению памяти, milcore.dll избавляет от необходимости думать о недействительности и перерисовке окна. Вы просто создаете объекты с содержимым, которое хотите отобразить, a milcore.dll рисует соответствующие части окна, когда оно перемещается, скрывается и раскрывается, сворачивается и восстанавливается, и т.д.

WindowsCodecs.dll

Низкоуровневый API-интерфейс, обеспечивающий поддержку изображений (например, обработку, отображение и масштабирование растровых изображений и файлов JPEG).

Direct3D

Низкоуровневый API-интерфейс, через который визуализируется вся графика в WPF.

User32

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

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

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