Объекты поведения

35

Любое приложение на платформе Silverlight или WPF представляет собой полнофункциональное сочетание разметки XAML, описывающей внешний вид приложения и кода, определяющего его функциональные возможности. Конкретный код, который приходится писать вручную, зависит от характера разрабатываемого проекта. Так, в процессе разработки проекта может возникнуть потребность в написании кода для установления связи с удаленной WCF-службой, чтения данных из реляционной базы данных, формирования динамического содержимого во время выполнения и т.п. И хотя базовый код каждого приложения по-своему уникален, существует целый ряд ситуаций, типичных для многих приложений, в которых интенсивно используется графика.

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

Допустим, вы создаете пользовательский интерфейс, в котором применяются операции привязки данных, и вам требуется воспроизводить разные виды анимации по раскадровке при обновлении источника данных. Для решения этой задача вы могли бы, конечно, написать специальный код на C# или VB, но в состав Expression Blend SDK входят разнообразные готовые обыкты поведения, способные решить подобные задачи программирования в типичных ситуациях.

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

Большинство встроенных объектов поведения включены в состав библиотеки Microsoft.Expression.Interactivity.dll и автоматически вводятся в проекты, разрабатываемые в Expression Blend, по ссылке на эту библиотеку, когда требуется воспользоваться ими (Если же вы хотите воспользоваться объектами поведения в среде Visual Studio 2010, вам придется сделать ссылку на данную библиотеку вручную.) Ниже перечислены некоторые, но не все объекты поведения, входящие в состав Expression Blend SDK и сгруппированные по сходным выполняемым функциям:

FluidMoveBehavior

Действует вместе с несколькими связанными с ним объектами и позволяет управлять анимациеи и эффектами переходов между элементами пользовательского интерфейса, что иначе наэывается плавным поведением

ControlStoryboardAction

Позволяет начинать, останавливать и приостанавливать анимацию по раскадровке, не прибегая к написанию процедурного кода

CalLMethodAction, ChangePropertyAction, InvokeCommandAction

Изменяют свойство объекта, вызывают метод для объекта или инициируют выполнение команды в разметке XAML

GoToStateAction

Позволяет переходить в новое состояние, определяемое диспетчером визуальных состояний (Visual State Manager), что характерно для построения специальных шаблонов

PlaySoundAction

Определяет различные условия воспроизведения звуковой записи

DataStateBahavior, SetDataStoreValueAction

Определяет порядок применения визуальных эффектов при выполнении операций привязки данных

MouseDragElementBehavior

Дает пользователю возможность перемещать элемент, содержащийся в диспетчере компоновки

ActivateStateAction, NavigateToScreenAction, NavigateBackAction, NavigateForwardAction

Позволяют, наряду с другими объектами поведения, определить навигационную структуру при построении прототипа пользовательского интерфейса с помощью компонента SketchFlow среды Expression Blend

Напомним, что каждый из перечисленных выше объектов поведения преобразуется в тип класса, и поэтому в каждом таком объекте поддерживается целый ряд свойств, методов и событий, многие из которых могут быть настроены на панели Properties аналогично элементам управления пользовательского интерфейса. Далее будет показано, каким образом действуют различные объекты поведения, а полное их описание можно найти в справочной системе Expression Blend SDK for WPF User Guide (Руководство пользователя набором инструментальных средств Expression Blend SDK для платформы WPF).

Справочная система Expression Blend SDK for WPF User Guide отличается от справочной системы Expression Blend User Guide, и поэтому их не следует путать!

Открыв эту справочную систему, вы найдете подробное описание каждого из объектов поведения, а также примеры их настройки:

Expression Blend SDK for WPF User Guide

Как и остальные компоненты Expression Blend IDE, объекты поведения можно обнаружить в библиотеке ресурсов. На рисунке ниже показано содержимое категории Behaviors из этой библиотеки на панели Assets:

Библиотека ресурсов объектов поведений

Объект поведения типа MouseDragElementBehavior

В завершение рассматриваемого ранее примера проекта будет показано, насколько полезными могут оказаться объекты поведения. С этой целью выберите третью вкладку Behaviors! на монтажном столе для последующей правки. Затем создайте на монтажном столе любую геометрическую форму, например шестиугольную, доступную в категории Shapes библиотеки ресурсов, настроив ее основные свойства (цвета и прочее). Далее выберите компонент MouseDragElementBehavior в библиотеке ресурсов и перетащите его на вновь созданную геометрическую форму.

Пиктограмма библиотеки ресурсов со знаком » исчезнет с панели Tools, как только выбранный в этой библиотеке элемент появится в нижней части панели Tools. Как упоминалось ранее, пользоваться панелью Assets удобнее, поскольку она остается на экране после ее выбора. Кроме того, панель Assets значительно упрощает работу с объектами поведения, которые обычно переносятся на монтажный стол методом перетаскивания.

Как подразумевает название объекта поведения типа MouseDragElementBehavior, его можно использовать для упрощенной реализации в приложениях функциональных возможностей перетаскивания элементов пользовательского интерфейса, не прибегая к обработке целого ряда событий от мыши, расчетам проверок попадания курсора или написанию сложного кода для перестановки элемента в родительском контейнере. Проанализировав содержимое панели Objects and Timeline, вы обнаружите, что компонент MouseDragElementBehavior является потомком целевой геометрической формы.

Итак, выберите узел этого объекта поведения и проанализируйте содержимое панели Properties. У данного объекта поведения имеется единственное свойство ConstrainToParentBounds (Соблюдение родительских рамок). Если установить флажок этого свойства, как показано на рисунке, то данный объект поведения автоматически примет к сведению, что перетаскиваемый элемент не может быть перемещен за пределы своего родительского диспетчера компоновки:

Свойства объекта поведения

Запустите свое приложение на выполнение и проверьте, сможете ли вы перемещать геометрическую форму по сетке. Нетрудно себе представить, насколько полезным может оказаться такой объект поведения в самых разных проектах. В частности, на платформе Silverlight можно построить приложение электронной коммерции и воспользоваться данным объектом поведения, чтобы предоставить пользователю возможность перетаскивать закупаемые товары в тележку для покупок с автоматическим подсчетом их стоимости. Этот объект можно также использовать при создании интерактивных видеоигр, мультимедийных и прочих приложений.

В отношении данного конкретного объекта поведения необходимо сделать следующую оговорку: его нельзя применять к объектам, поддерживающим событие типа Click. Если вам требуется предоставить пользователю возможность перетаскивать элемент интерфейса, например, кнопку, представленную объектом типа Button, для решения этой задачи вам придется приложить дополнительные усилия. В частности, придется заключить этот элемент пользовательского интерфейса в объект типа Border, а затем применить компонент MouseDragElementBehavior именно к объекту типа Border, а не к его порожденному элементу управления.

Для того чтобы убедиться в этом, добавьте объект типа Button на монтажном столе, щелкните на нем правой кнопкой мыши и выберите команду Group Into из всплывающего контекстного меню, чтобы поместить этот элемент пользовательского интерфейса в контейнер элемента управления типа Border. Затем перейдите к панели Properties, установите значение 3 в свойстве BorderThickness (Толщина границы) по всем четырем сторонам и выберите особый цвет для свойства BorderBrush (Кисть обводки границы). Как только вы добавите новый компонент MouseDragElementBehavior в контейнер элемента управления типа Border, то сможете перемещать кнопку по сетке во время выполнения своего приложения:

Перемещение элементов пользовательского интерфейса
Пройди тесты
Лучший чат для C# программистов