Поведения
29WPF --- Привязка, команды и стили WPF --- Поведения
Стили предоставляют практический способ для повторного использования групп настроек свойств. Они являются замечательным первым шагом, который помогает получить согласованные, хорошо организованные интерфейсы, но также очень ограничены в плане возможностей.
Проблема заключается в том, что настройки свойств представляют собой лишь небольшую часть инфраструктуры пользовательского интерфейса в любом типичном приложении. Даже самая простая программа обычно требует написания массы кода для пользовательского интерфейса, не имеющего ничего общего с функциональностью приложения.
Во многих программах код, который применяется для решения задач в пользовательском интерфейсе (вроде запуска анимации, реализации визуальных эффектов, обслуживания состояния пользовательского интерфейса и поддержки таких необходимых в любом пользовательском интерфейсе средств, как перетаскивание, масштабирование и стыковка), значительно превышает бизнес-код как по размеру, так и по сложности. Большая часть этого кода носит обобщенный характер, а, значит, влечет за собой необходимость написания одних и тех же вещей в каждом создаваемом проекте WPF. И практически весь он является утомительным.
В ответ на эту проблему создатели Expression Blend разработали средство под названием поведения. Идея очень проста: сначала создается поведение, которое инкапсулирует общую часть функциональности пользовательского интерфейса. Эта функциональность может быть как простой (запуск раскадровки или переход по ссылке), так и сложной (обработка сенсорного взаимодействия или моделирование столкновения с помощью механизма реального времени). Созданная функциональность затем может добавляться в элемент управления внутри любого приложения за счет подключения этого элемента к правильному поведению и установки свойств поведения. Использование поведения в Expression Blend требует немногим более чем операцию перетаскивания.
Специальные элементы управления являются еще одним приемом повторного использования функциональности пользовательского интерфейса в приложении (или в нескольких приложениях). Однако они должны разрабатываться в виде тесно связанного пакета визуальных элементов и кода. Несмотря на чрезвычайную мощность, в ситуациях, когда необходимо оснастить множество разных элементов управления схожей функциональностью (например, добавить эффект наведения курсора мыши к группе элементов), они не подходят. По этой причине стили, поведения и специальные элементы управления считаются дополнительными средствами.
Поддержка поведений
Существует одна загвоздка. Инфраструктура для повторного использования общих блоков кода пользовательского интерфейса не является частью WPF. Вместо этого она поставляется в составе Expression Blend 3 (и Expression Blend 4). Объясняется это тем, что поведения впервые появились как средство времени проектирования для Expression Blend.
Продукт Expression Blend по-прежнему остается единственным инструментом, который позволяет добавлять поведения простым их перетаскиванием на нужные элементы управления. Это не означает, что поведения полезны только в Expression Blend. Их можно создавать и использовать также в приложениях Visual Studio, причем с весьма небольшим количеством дополнительных усилий. Вместо применения окна Toolbox, понадобится просто написать соответствующий код разметки.
Получить сборки, предоставляющие поддержку для использования поведений, можно двумя способами:
Установить Expression Blend 3 (или бесплатную ознакомительную версию).
Установить набор Expression Blend 3 SDK.
В обоих случаях в папке 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? Ниже приведено несколько пояснений:
Модель поведений не является основной частью WPF, а потому она не настолько устоявшаяся, как стили и шаблоны. Другими словами, программировать WPF-приложения без применения поведений можно, но без стилей и шаблонов создать нечто сложнее демонстрационной программы "Hello World" не получится.
Система триггеров, предлагаемая в Expression Blend, может представлять интерес при проведении большей части времени в Expression Blend или при разработке компонентов для других пользователей Expression Blend. Несмотря на то, что она имеет такое же название, как система триггеров WPF, никакого совпадения между ними нет и потому использовать можно обе системы.
Если вы не работаете с Expression Blend, можете вообще не обращать внимания на предлагаемую в этом продукте систему триггеров. Однако стоит ознакомиться с предлагаемыми Expression Blend полнофункциональными классами поведений.
Причина в том, что поведения и более мощные, и более распространенные по сравнению с триггерами Expression Blend. Со временем в любом случае обнаружится какой-то компонент от стороннего производителя, включающий хорошо отлаженное поведение, которое можно использовать в собственных приложениях.
Система триггеров Expression Blend описываться не будет, но зато будут рассмотрены полнофункциональные классы поведений. Дополнительные сведения о триггерах Expression Blend, а также примеры применения поведений (некоторые из них предназначены для Silverlight, а не для WPF), можно найти в публикациях по адресу http://tinyurl.com/yfvakl3.