На заметку! Хотя WPF переносит все запросы визуализации на уровень DirectX, нельзя утверждать, что приложение WPF будет работать настолько же быстро, как приложение, построенное с использованием неуправляемого языка C++ и DirectX. Несмотря на значительные усовершенствования, вносимые в WPF с каждым новым выпуском, если вы намереваетесь строить настольное приложение, которое требует максимально возможной скорости выполнения (вроде трехмерной игры), то неуправляемый C++ и DirectX по-прежнему будут наилучшим выбором.

<p id="AutBody_Root1071"><strong>Упрощение программирования сложных пользовательских интерфейсов</strong></p>

Чтобы подвести итоги сказанному до сих пор: WPF — это API-интерфейс, предназначенный для построения настольных приложений, который интегрирует разнообразные настольные API-интерфейсы в единую объектную модель и обеспечивает четкое разделение обязанностей через XAML. В дополнение к указанным важнейшим моментам приложения WPF также выигрывают от простого способа интеграции со службами, что исторически было довольно сложным. Ниже кратко перечислены основные функциональные возможности WPF.

• Множество диспетчеров компоновки (гораздо больше, чем в Windows Forms) для обеспечения исключительно гибкого контроля над размещением и изменением позиций содержимого.

• Применение расширенного механизма привязки данных для связывания содержимого с элементами пользовательского интерфейса разнообразными способами.

• Встроенный механизм стилей, который позволяет определять "темы" для приложения WPF.

• Использование векторной графики, поддерживающей автоматическое изменение размеров содержимого с целью соответствия размерам и разрешающей способности экрана, который отображает пользовательский интерфейс приложения.

• Поддержка двумерной и трехмерной графики, анимации, а также воспроизведения видео- и аудио-роликов.

• Развитый типографский API-интерфейс, который поддерживает документы XML Paper Specification (XPS), фиксированные документы (WYSIWYG), документы нефиксированного формата и аннотации в документах (например, API-интерфейс Sticky Notes).

• Поддержка взаимодействия с унаследованными моделями графических пользовательских интерфейсов (такими как Windows Forms, ActiveX и HWND-дескрипторы Win32). Например, в приложение WPF можно встраивать специальные элементы управления Windows Forms и наоборот.

Теперь, получив определенное представление о том, что инфраструктура WPF привносит в платформу, давайте рассмотрим разнообразные типы приложений, которые могут быть созданы с применением данного API-интерфейса. Многие из перечисленных выше возможностей будут подробно исследованы в последующих главах.

<p id="AutBody_Root1072"><strong>Исследование сборок WPF</strong></p>

В конечном итоге инфраструктура WPF — не многим более чем коллекция типов, встроенных в сборки .NET Core. В табл. 24.3 описаны основные сборки, используемые при разработке приложений WPF, на каждую из которых должна быть добавлена ссылка, когда создается новый проект. Как и следовало ожидать, проекты WPF в Visual Studio ссылаются на эти обязательные сборки автоматически.

В этих четырех сборках определены новые пространства имен, а также классы, интерфейсы, структуры, перечисления и делегаты .NET Core. В табл. 24.4 описана роль некоторых (но далеко не всех) важных пространств имен.

В начале путешествия по программной модели WPF вы исследуете два члена пространства имен System.Windows, которые являются общими при традиционной разработке любого настольного приложения: Application и Window.

На заметку! Если вы создавали пользовательские интерфейсы для настольных приложений с использованием API-интерфейса Windows Forms, то имейте в виду, что сборки System.Windows.Forms.* и System.Drawing.* никак не связаны с WPF. Они относятся к первоначальному инструментальному набору .NET для построения графических пользовательских интерфейсов, т.е. Windows Forms/GDI+.

<p id="AutBody_Root1073"><strong>Роль класса Application</strong></p>

Класс System.Windows.Application представляет глобальный экземпляр выполняющегося приложения WPF. В нем имеется метод Run() (для запуска приложения) и комплект событий, которые можно обрабатывать для взаимодействия с приложением на протяжении его времени жизни (наподобие Startup и Exit). В табл. 24.5 описаны основные свойства класса Application.

<p id="AutBody_Root1074"><strong>Построение класса приложения</strong></p>

В любом приложении WPF нужно будет определить класс, расширяющий Application. Внутри такого класса определяется точка входа программы (метод Main()), которая создает экземпляр данного подкласса и обычно обрабатывает события Startup и Exit (при необходимости). Вот пример:

// Определить глобальный объект приложения для этой программы WPF.

class MyApp : Application

{

  [STAThread]

  static void Main(string[] args)

  {

Перейти на страницу:

Похожие книги