1 РАЗРАБОТКА ПРИЛОЖЕНИЙ С ИСПОЛЬЗОВАНИЕМ ВЫСОКОУРОВНЕВОГО API-ИНТЕРФЕЙСА WPF



1.1 Основные сведения о технологии Windows Presentation Foundation и языке XAML


1.1.1 Технология Windows Presentation Foundation, WPF базируется на новой графической системе, созданной для унификации и объединения всех ранее несвязанных средств построения графических интерфейсов в единой объектной модели.

Технология WPF основывается на векторной системе визуализации и ориентирована на разработку клиентских Windows приложений с интерфейсом в стиле презентаций, базирующихся на технологии .

Преимущества WPF:

- чёткое отделение внешнего вида и поведения приложения Windows от программной логики, управляющей этим поведением;

- внешний вид приложения может создавать профессиональный дизайнер, а программист параллельно - писать логику;

- интерфейсы максимально независимы от разрешения экрана и размера окна за счёт использования 3D графики, которая строится в векторном виде;

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

WPF использует аппаратное ускорение через DirectX и включает набор высокоуровневых служб, ориентированных на программистов-разработчиков:

- web-подобную модель компоновки;

- развитые модели рисования и отображения текста;

- программную концепцию анимации;

- поддержку аудио и видео;

- стили и шаблоны;

- модель команд;

- декларативный пользовательский интерфейс.

Web-подобная модель компоновки WPF не использует жёсткую привязку элементов управления к определённым координатам окна, а поддерживает гибкий поток, размещающий элементы управления на основе их содержимого. В результате получается пользовательский интерфейс, который может быть адаптирован к отображению высоко динамичного содержимого или к разным языкам.

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

WPF предоставляет Windows-приложениям возможность отображения расширенного стилизованного текста в любом месте пользовательского интерфейса. Если возникает необходимость отображать значительные объёмы текста, то для повышения читабельности WPF предоставляет такие развитые средства отображения документов, как переносы, разбиение на колонки и выравнивание.

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

Прежние инструментальные наборы для построения пользовательских интерфейсов, такие как Windows Forms, были весьма ограничены в работе с мультимедиа. WPF включает поддержку воспроизведения любого аудио - или видеофайла, поддерживаемого проигрывателем Windows Media, позволяя воспроизводить более одного медиа-файла одновременно. WPF предоставляет в распоряжение разработчика инструменты для интеграции видео-содержимого в остальную часть пользовательского интерфейса, что позволяет выполнять такие сложные сценарии, как размещение видео-окна на поверхности вращающегося трёхмерного куба.

Стили позволяют стандартизировать форматирование и многократно использовать его по всему приложению. Шаблоны дают возможность изменить способ отображения элементов с помощью построения интерфейса с «обложками».

Используемая в WPF модель команд обеспечивает определение команд приложения в одном месте и далее привязывать их к множеству элементов управления.

WPF допускает конструирование окна WPF в коде, но в Visual Studio используется другой подход. Содержимое каждого окна сериализуется в виде XML-дескрипторов в документе XAML (eXtensible Application Markup Language - расширяемый язык разметки приложений). Преимущество состоит в том, что пользовательский интерфейс полностью отделяется от кода, и дизайнеры графики могут использовать профессиональные инструменты для редактирования файлы XAML, улучшая внешний вид всего приложения.

Используя WPF, можно строить браузер-подобные приложения, которые позволяют перемещаться по коллекции страниц, оснащённой кнопками навигации. WPF автоматически обрабатывает все сложные детали, такие как хронология посещения страниц. Приложение WPF можно развернуть в виде браузерного приложения, которое выполняется внутри Internet Explorer.


1.1.2 Язык XAML создан специально для построения пользовательских интерфейсов для WPF - и Silverlight-приложений. XAML-документ содержит разметку, описывающую внешний вид и поведение окна или страницы приложения, а связанные с ним файлы процедурного кода (C#, Visual Basic и др.) содержат логику приложения.

НЕ нашли? Не то? Что вы ищете?

Язык XAML обеспечивает разделение процесса дизайна приложения (графической части) и разработки бизнес-логики (программного кода) между дизайнерами и разработчиками прикладного программного кода.

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

Синтаксис XAML, базируясь на языке расширенной разметки XML (eXtensible Markup Language), поддерживает его базовые правила, а также определяет свои:

- каждый элемент XAML-документа отображается на некоторый экземпляр класса. NET;

- элементы XAML можно вкладывать друг в друга, вложение элементов разметки обычно отображает вложенность элементов интерфейса;

- свойства класса определяются с помощью атрибутов или с помощью вложенных дескрипторов со специальным синтаксисом.

Язык XAML характеризуется «самоописанием». Каждому элементу в XAML-документе соответствует имя класса процедурного языка (например, элементу XAML <Window> соответствует класс Window, <Button> - Button и др.) в рамках заданного пространства имён. Атрибуты элементов используются для задания свойств (Title, Name, Height, Width и т. п.) и событий (Click, Load и т. д.).

1.2 Практическое руководство по использованию языка XAML


Для знакомства с основами языка XAML необходимо создать WPF приложение в инструментальной среде Visual Studio 2010 на языке C# 4.0.

Шаг 1. Создать проект WPF приложения можно двумя способами:

- с помощью пункта меню File\New\Project…, как иллюстрирует рисунок 1.1;

- с помощью ссылки New Project главной панели среды, отображённой на рисунке 1.2.

Рисунок 1.1

Рисунок 1.2

Шаг 2. В открывшемся окне New Project выбрать тип проекта WFP Application и определить местоположение папки проекта (Location). Поле со списком версий платформы отображает целевую версию, установленную по умолчанию, в данном случае. NET Framework 4. На рисунке 1.3 отмечена последовательность действий диалога.

Рисунок 1.3

На рисунке 1.4 отображены основные компоненты среды, используемые для разработки приложения WFP.

Рисунок 1.4

Шаг 3. Щёлкнуть по рабочей поверхности компоновки и с помощью Properties установить начальные свойства окна: заголовок Title и стартовое положение окна при запуске WindowStartupLocation="CenterScreen".

После выполнения Шаг 1 - Шаг 3 средой будет автоматически сгенерирован следующий XAML-документ:

<Window x:Class="WpfApplication1.MainWindow"

xmlns=http://schemas. /winfx/2006/xaml/presentation

xmlns:x=http://schemas. /winfx/2006/xaml

Title="Первый проект" Height="350" Width="525" WindowStartupLocation="CenterScreen">

  <Grid>

  </Grid>

</Window>

Любой XAML-документ состоит из XAML-элементов, им соответствуют дескрипторы описания или тэги, в приведённом коде – это <Window></Window> и <Grid></Grid>.

Любой дескриптор XAML-элемента начинаетсяс символа <, а завершается символом >.

Каждый XAML-документ (XAML-элемент) начинается открывающимся дескриптором, например,<Window, за которым следует содержимое документа - описания атрибутов (например, Class, xmlns, Title, Height, Width и др.), текстовая строка или другие XAML-элементы, и завершает описание символ >.

XAML-документ (XAML-элемент) должен завершаться закрывающимся дескриптором (например, /> или </Window>).

Текст XAML-документа должен содержать один корневой элемент - элемент верхнего уровня вложенности. В XAML-документе WPF-приложения такими элементами чаще всего являются <Window> или <NavigationWindow>. В корневой элемент могут быть добавлены другие XAML-элементы. В рассматриваемом XAML-документе это элемент <Grid>.

В процессе компиляции XAML-документа WPF-приложения синтаксический анализатор переводит XAML файлы в файлы языка двоичной разметки приложений Binary Application Markup Language, BAML, которые затем встраиваются в виде ресурсов в сборку проекта.

Для построения классов WPF-приложения синтаксический анализатор использует пространство имён, которое определено в корневом дескрипторе XAML-документа.

Пространство имён в XAML-документе задаётся с помощью атрибута xmlns.

В приведённом выше документе объявлено два пространства имён:

xmlns=http://schemas. /winfx/2006/xaml/presentation – это базовое пространство имён WPF, которое охватывает все классы WPF, включая элементы управления, которые применяются при построении пользовательского интерфейса, так как данное пространство имён объявлено без префикса, то оно распространяется на весь XAML-документ;

xmlns:x=http://schemas. /winfx/2006/xaml – дополнительное пространство имён XAML, которое включает различные свойства утилит XAML, которые позволяют влиять на то, как XAML-документ следует интерпретировать.

Дополнительное пространство имён отображается на префикс x. Этот префикс можно помещать перед именем элемента - x:ИмяЭлемента. Используется данное пространство имён для включения специфичных для XAML лексем – «ключевых слов».

В WPF-приложениях кроме базовых применяют специальные, необязательные пространства имён:

http://schemas. openxmlformats. org/markup-compatibility/2006 - пространство имён XAML, связанное с проблемой совместимости разметки с рабочей средой, данное пространство имён используется для информирования синтаксического анализатора XAML о том, какую информацию необходимо обработать, а какую – проигнорировать;

http://schemas. /expression/blend/2008 - пространство имён XAML, поддерживаемое программами Expression Blend и Visual Studio, данное пространство имён используется для установки размеров графической панели для страницы.

В таблице 1.1 приведены наиболее часто используемые ключевые слова XAML.

Таблица 1.1


Ключевое слово

Назначение

x:Array

Представляет тип массива. NET на XAML

x:ClassModifier

Позволяет определять видимость типа класс (internal или public), обозначенного ключевым словом Class

x:FieldModifier

Позволяет определять видимость члена типа (internal, public, private или protected) для любого именованного элемента корня. Именованный элемент определяется с использованием ключевого слова Name

x:Key

Позволяет установить значение ключа для элемента XAML, которое должно быть помещено в элемент словаря

x:Name

Позволяет указывать сгенерированное C# имя заданного элемента XAML

x:Null

Представляет null-ссылку

x:Static

Позволяет ссылаться на статический член типа

x:Type

XAML-эквивалент операции C# typeof (вызывает System. Type на основе указанного имени)

x:TypeArgument

Позволяет устанавливать элемент как обобщённый тип с определёнными параметрами


В атрибуты объекта Window могут быть добавлены следующие XAML-описания:

xmlns:mc="http://schemas. openxmlformats. org/markup-compatibility/2006"

xmlns:d="http://schemas. /expression/blend/2008"

mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="600"

Данное XAML-описание объявляет необязательные пространства имён с префиксами mc и d.

Свойства DesignHeight и DesignWidth находятся в пространстве имён, помеченном префиксом d. Данные свойства определяют, что во время разработки проекта приложения в дизайнере Visual Studio окно должно иметь размеры 300Ч600.

Свойство Ignorable находится в пространстве имён, помеченном префиксом mc, и информирует синтаксический анализатор о том, что он должен игнорировать часть XAML-документа, помеченный префиксом d.

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

Если в проекте имеется пространство имён mands, то подключение его к XAML-документу WPF-приложения будет иметь следующий вид (command - используется в качестве префикса):

xmlns:command="clr-namespace: mands"

Префикс (command) используется для ссылки на пространство имён в XAML-документе.

Лексеме clr-namespace присваивается название пространства имён. NET в сборке.

Для описания класса в XAML-документе используется атрибут Class. Строка XAML-документа

<Window x:Class="WpfApplication1.MainWindow" … >

предписывает создать класс WpfApplication1.MainWindow на базе класса Window. Префикс x атрибута Class определяет то, что данный атрибут помещается в пространство имён XAML. Класс MainWindow генерируется автоматически во время компиляции. Для части класса автоматически генерируется код (частичный (partial) класс):

namespace WpfApplication1

{

///<summary>

/// Interaction logic for MainWindow. xaml

///</summary>

public partial class MainWindow : Window

  {

public MainWindow()

  {

InitializeComponent();

  }

  }

}

Когда выполняется компиляция приложения, XAML-файл, который определяет пользовательский интерфейс (файл MainWindow. xaml), транслируется в объявление типа CLR, которое объединяется с логикой приложения из файла класса отдельного кода (MainWindow. xaml. cs).

Для программного управления элементами управления, описанными в XAML-документе необходимо для элемента управления задать XAML атрибут Name.

Так для задания имени grid1 объекту класса Grid необходимо записать следующую разметку:

<Grid Name="grid1"

</Grid>

Простые свойства задаются в XAML-документе в соответствии со следующим синтаксисом ИмяСвойства = "значение", например, Name="grid1".

При необходимости задать свойство, которое является полноценным объектом, используются сложные свойства в соответствии с синтаксисом «свойство-элемент» со следующим синтаксисом Родитель. ИмяСвойства.

Например, если для контейнера StackPanel необходимо задать градиентную кисть для заливки панели, то используется атрибут Background. Это реализуется с помощью дескрипторов <StackPanel. Background>…</StackPanel. Background>.

Для задания значения свойства из выделенного класса используется расширение разметки, которое обеспечивает расширение грамматики XAML новой функциональностью. Расширения разметки могут использоваться во вложенных дескрипторах или в XAML-атрибутах. Когда это используется в атрибутах, то необходимо применять фигурные скобки {…}.

Расширения разметки используют следующий синтаксис:

{КлассРасширенияРазметки  Аргумент}

Расширения разметки реализуются классами, дочерними от класса System. Windows. Markup. MarkupExtention.

Базовый класс MarkupExtention имеет метод ProvideValue(), который предоставляет нужное значение для атрибута. Например, для задания атрибуту Foreground объекта Button статического свойства, определённого в другом классе, необходимо создать следующее XAML-описание:

<Button Foreground="{x:StaticSystemColors. ActiveCaptionBrush}" />

При компиляции синтаксический анализатор создаст экземпляр класса StaticExtention, затем вызовет метод ProvideValue(), который извлечёт нужное значение и установит его для свойства Foreground.

Расширения разметки могут использоваться как вложенные свойства.

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

Синтаксис присоединённых свойств ОпределяющийТип. ИмяСвойства.

Например, если необходимо расположить кнопку в нулевой строке сетки, то необходимо сделать следующее XAML-описание:

<Button Grid. Row="0" Grid. Column="0" >

</Button>

Здесь присоединённым свойством является Grid. Row, то есть свойство Row элемента <Grid>, которое не является свойством объекта <Button>. Свойство Row присоединяется к свойствам объекта <Button>, поскольку данный объект располагается в контейнере <Grid>.

Атрибуты объектов могут использоваться для присоединения обработчиков событий, используя следующий синтаксис

ИмяСобытия = "ИмяМетодаОбработчикаСобытия"

Например, для кнопки по событию Click можно установить обработчик события "Exit_Click", как иллюстрирует рисунок 1.5.

Рисунок 1.5

Ниже приведён процедурный код, который генерируется автоматически при создании описания обработчика события в XAML-описании:

private void Exit_Click(object sender, RoutedEventArgs e)

  {

  …

  }

Определяя в XAML-описании обработчик события Click="Exit_Click", необходимо в коде класса спроектировать метод с корректным заголовком (переход по Navigate to Event Handler контекстного меню в окне разметки XAML).

1.3 Интерфейсные модели WPF приложений

API-интерфейс WPF может использоваться для построения широкого разнообразия приложений с графическим интерфейсом, которые отличаются структурой навигации и моделями развёртывания, это:

- традиционные настольные приложения;

- WPF-приложения с интерфейсом, основанным на навигации;

- приложения, которые могут размещаться внутри окна web-браузера (XAML Browser Applications, ХВАР).

Традиционные настольные приложения и WPF-приложения с интерфейсом, основанным на навигации, относятся к автономным приложениям, так как имеют собственное главное окно.

Программная модель WPF существенно отличается тем, что все операции визуализации (двух - и трёхмерная графика, анимация, визуализация графических интерфейсных элементов) используют API-интерфейс DirectX.

Приложения WPF автоматически используют преимущества аппаратной и программной оптимизации, а также развитые графические службы (эффекты размытия, сглаживания, прозрачности).