Поведения

29

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

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

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

В ответ на эту проблему создатели Expression Blend разработали средство под названием поведения. Идея очень проста: сначала создается поведение, которое инкапсулирует общую часть функциональности пользовательского интерфейса. Эта функциональность может быть как простой (запуск раскадровки или переход по ссылке), так и сложной (обработка сенсорного взаимодействия или моделирование столкновения с помощью механизма реального времени). Созданная функциональность затем может добавляться в элемент управления внутри любого приложения за счет подключения этого элемента к правильному поведению и установки свойств поведения. Использование поведения в Expression Blend требует немногим более чем операцию перетаскивания.

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

Поддержка поведений

Существует одна загвоздка. Инфраструктура для повторного использования общих блоков кода пользовательского интерфейса не является частью WPF. Вместо этого она поставляется в составе Expression Blend 3 (и Expression Blend 4). Объясняется это тем, что поведения впервые появились как средство времени проектирования для Expression Blend.

Продукт Expression Blend по-прежнему остается единственным инструментом, который позволяет добавлять поведения простым их перетаскиванием на нужные элементы управления. Это не означает, что поведения полезны только в Expression Blend. Их можно создавать и использовать также в приложениях Visual Studio, причем с весьма небольшим количеством дополнительных усилий. Вместо применения окна Toolbox, понадобится просто написать соответствующий код разметки.

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

В обоих случаях в папке c:\Program Files\Microsoft SDKs\Expression\Blend 3\Interactivity\Libraries\WPF появятся две важных сборки:

System.Windows.Interactivity.dll

В этой сборке определены базовые классы, которые поддерживают поведения. Она является главной составляющей средства поведений.

Microsoft.Expression.Interactions.dll

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

Базовые сборки для поддержки поведений

Модель поведений

Средство поведений поставляется в двух версиях (обе они включены в Expression Blend и Expression Blend SDK). Одна версия предназначена для добавления поддержки поведений к Silverlight (многофункциональный клиентский подключаемый модуль для браузера от Microsoft), а вторая — для WPF. Хотя обе они предлагают идентичные возможности, более естественно поведения вписываются в мир Silverlight, поскольку заполняют там больший пробел. В отличие от WPF, в Silverlight отсутствует поддержка триггеров, поэтому в сборках, реализующих поведения, также реализованы и триггеры.

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

Проблема заключается в том, что эти два компонента с похожими именами совпадают частично, но не полностью. В WPF самая важная роль триггеров состоит в построении гибких стилей и шаблонов элементов управления. С помощью триггеров стили и шаблоны можно делать более интеллектуальными; например, можно применить визуальный эффект при изменении некоторого свойства. Тем не менее, система триггеров в Expression Blend имеет другое предназначение — она позволяет добавлять в приложения простую функциональность с использованием визуальных средств проектирования. Другими словами, триггеры в WPF служат для создания более мощных стилей и шаблонов элементов управления, а триггеры в Expression Blend — для быстрого построения приложений без написания кода.

Итак, что все это означает для обычного разработчика приложений WPF? Ниже приведено несколько пояснений:

Система триггеров Expression Blend описываться не будет, но зато будут рассмотрены полнофункциональные классы поведений. Дополнительные сведения о триггерах Expression Blend, а также примеры применения поведений (некоторые из них предназначены для Silverlight, а не для WPF), можно найти в публикациях по адресу http://tinyurl.com/yfvakl3.

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