Будучи принципиально новой инфраструктурой презентационного уровня, WPF принесла с собой множество новых концепций и новую область программирования — и представляет собой новый и весьма серьезный материал для изучения. Но давайте же кратко рассмотрим общую архитектуру платформы WPF, а затем изучим модель программирования.
Физически WPF реализована как три dll-файла:
□ WindowsBase.dll;
□ PresentationFramework.dll;
□ PresentationCore.dll.
Любая инфраструктура презентационного уровня должна в конечном счете рисовать на экране пикселы, и WPF в этом смысле не отличается. В ее двоичных файлах реализованы цвижки композиции и визуализации, которые работают с вашим аппаратным обеспечением через DirectX. В дополнение к уровням отображения имеется также и богатая программная модель, которая реализована с поддержкой таких вещей, как компоновка, контейнеры (когда один элемент содержит другой) и отправка событий/сообщений. Короче говоря, она де- пает всю тяжелую работу для того, чтобы даже очень сложные пользовательские интерфейсы могли отображаться на экране с производительностью достаточной для того, чтобы удовлетворить потребности широкого диапазона решений.
На рис. 16.1 показана логическая архитектура компонентов WPF. Движок визуализации содержится внутри компонента Media Integration Layer; PresentationCore занимается взаимодействием со слоем Media Integration Layer, a PresentationFramework содержит все остальное, что необходимо для обеспечения работы платформы WPF (компоновка, привязка данных, уведомления о событиях).
Примечание
Большая часть самой WPF реализована на управляемом коде .NET. Исключением является Media Integration Layer. Когда дело доходит до визуализации пользовательского интерфейса на экране, то главной задачей WPF становится оптимизация производительности, и поэтому Media Integration Layer реализован на машинном коде.
Все эти компоненты WPF работают сообща для того, чтобы обеспечить впечатляющий список улучшений дизайна и конструкции презентационного уровня, а также его поддержки в .NET на стадии выполнения. Вот небольшая выборка:
□ мультимедиа — WPF поддерживает двумерную и трехмерную графику, а также видео форматов WMV, MPEG и AVI;
□ привязка данных — WPF с самого начала создавалась с полной поддержкой всего спектра вариантов привязки данных, вплоть до LINQ;
□ взаимодействие с Windows Forms — приложения WPF могут содержать компоненты WinForms и наоборот. Это удобно, поскольку означает, что разработчикам не придется отказываться от своих приобретенных большими усилиями знаний, полученных в течение многих лет программирования под WinForms;
□ поддержка документов — WPF имеет несколько собственных конструкций для создания приложений по работе с документами. Например, имеется класс Document Reader для отображения документов фиксированного формата и класс FlowDocumentReader для отображения документов с динамической компоновкой. Например, газетная статья может автоматически изменять разбивку на страницы и при этом сохранять структуру колонок;
□ анимация — разработчики могут создавать анимацию (на основе раскадровок) и указывать триггеры и таймеры анимации;
□ внешний вид элементов управления— внешний вид элементов управления в WPF управляется шаблоном, который может быть изменен или заменен разработчиком (для полной настройки практически любого аспекта "хромировки" элемента управления);
□ текст— в WPF имеется богатая поддержка типографского оформления. Разработчик может манипулировать массой атрибутов шрифтов (кернингом; такими эффектами, как свечение, отбрасываемые тени и размытость движущегося объекта; автоматическими межстрочными интервалами и т. д.). WPF визуализирует текст с использованием технологии ClearType.
На начальных стадиях разработки фирма Microsoft выпустила несколько прототипов приложений для демонстрации новых технологий .NET 3.0 (и в том числе WPF). На рис. 16.2
показан снимок экрана прототипа приложения из области здравоохранения. Несмотря на то, что черно-белый снимок не позволяет отдать должное этому приложению, вы вполне можете оценить его возможности: такой пользовательский интерфейс реализовать при помощи технологии Windows Forms было бы исключительно трудно.
По большей части разработчик может не беспокоиться о нижнем уровне архитектурных подробностей технологии WPF; модель программирования и инструменты, которые помогают использовать эту модель — вот на чем сосредоточено внимание большинства разработчиков.