Поведения — это крутой способ добавления функциональности к элементам дизайна XAML в Expression Blend. Идея состоит в том, что некоторые богатые функциональные возможности, которые было бы трудно сделать конструктору, можно обернуть таким образом, чтобы затем можно было использовать их в качестве функции перетаскивания для добавления этой функциональности к элементу XAML в Expression Blend. Поведение тогда является «объектом», который реализует определенный базовый класс и элементы, чтобы его можно было легко использовать в Expression Blend в качестве «поведения» перетаскивания на поверхности конструктора. Чтобы построить новое поведение, вам нужно начать в Visual Studio.
Реализация поведения
Реализация поведения проста и может быть настолько сложной или простой, насколько вы захотите. Для начала вам нужно установить Expression Blend, чтобы вы могли проверить свое поведение в Expression Blend. Если вы уже находитесь в Expression Blend, щелкните правой кнопкой мыши проект и выберите «Открыть в Visual Studio», что означает, что для создания и тестирования поведения необходимо установить Expression Blend и Visual Studio. После открытия проекта в Visual Studio щелкните правой кнопкой мыши и выберите «Добавить новый». Затем в диалоговом окне «Добавить новый» выберите «Класс». Дайте классу имя, а затем вам нужно добавить библиотеку Expression Blend в ваш проект. Чтобы получить базовый класс (и связанное с ним пространство имен), необходимо добавить ссылку на
System.Windows.Interactivityпространство имен, которое поставляется с платформой Silverlight 4. Щелкните правой кнопкой мыши по ссылкам и выберите «Добавить ссылку». Как только пространство имен включено, вы готовы встроить созданный вами класс в Поведение. Начать нужно с добавления пространства имен вверху, например:
using System.Windows.Interactivity;
Он получает базовую библиотеку (пространство имен), которая вам нужна, чтобы вы могли наследовать от базового класса поведения. Далее, конечно, вам нужно настроить свой класс на наследование от
TargetedTriggerAction и заставить свой класс выглядеть следующим образом:
public class SomeBehavior : TargetedTriggerAction { }
TargetedTriggerAction — это наш базовый класс, где вы сможете применить его к классу типа
FrameworkElement . Для целей этого примера Поведение также будет нацелено специально на объекты Shape. Следующим шагом является реализация
Invoke , которая запускается, когда Поведение применяется к цели.
Invoke должен выглядеть следующим образом:
protected override void Invoke(object parameter) { }
С этого момента вам нужно получить ссылку на объект, на который нацелено ваше поведение, и делать с ним все, что необходимо для того, чтобы заставить объект делать то, что вы от него хотите («поведение»). В этом случае вы обычно добавляете обработчик события участника к событию целевого объекта в связанный объект, и вы начинаете создавать местоположение для ссылки на целевой объект:
Shape TargetElementItem1;
Теперь, когда
вызывается Invoke , вы получите свою ссылку, приведете ее к
Shape и поместите в ссылку на элемент:
TargetElementItem1 = (Shape)(this.AssociatedObject);
Этот код должен быть в
элементе Invoke . На этом этапе реализация для каждого Поведения будет все больше отличаться для каждого Поведения, которое вы строите. Этот пример изменяет цвет назад и вперед между двумя цветами, когда пользователь нажимает на форму. Затем вам нужно добавить эти члены в класс Behavior следующим образом:
Brush Color1; Brush Color2 = new SolidColorBrush(Color.FromArgb(0,0,0,0));
Это дает вам цвет для переключения и ссылку на основной цвет класса. Чтобы заполнить Color1 базовым или начальным цветом объекта, добавьте эту вторую строку в
метод Invoke :
Color1 = (Brush)(TargetElementItem1.Fill);
Теперь, когда у Поведения есть ссылка на цвета, а Форма набрана и на нее
ссылаются, вы можете добавить свою логику поведения. В этом примере добавьте две привязки событий к ссылке Shape следующим образом:
TargetElementItem1.MouseLeftButtonDown += new MouseButtonEventHandler(TargetElementItem1_MouseLeftButtonDown); TargetElementItem1.MouseLeftButtonUp += new MouseButtonEventHandler(TargetElementItem1_MouseLeftButtonUp); These lines won’t actually work until you add the two methods, which should look like this: void TargetElementItem1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { TargetElementItem1.Fill = Color1; } void TargetElementItem1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { TargetElementItem1.Fill = Color2; }
Это завершает поведение. Теперь вы сможете использовать его в Expression Blend.
Поведение потребления
Помимо визуального поведения, вы также можете добавить невизуальную функциональность, как в команде. Поэтому, если вы знакомы с командованием, хороший способ взглянуть на поведение — это «команды для дизайнеров в Expression Blend». Чтобы иметь возможность использовать Expression Blend для визуальной работы с элементом, вам необходимо иметь возможность видеть элемент, к которому вы хотите применить поведение. Например, в последнем разделе вы создали простое поведение. Теперь вам нужна форма, чтобы применить поведение. Вы можете начать с перетаскивания прямоугольника с панели инструментов на поверхность конструктора в Blend. Затем вам нужно установить заливку на сплошную цветную кисть, используя панель Свойства. Код XAML может выглядеть так:
<rectangle fill="Green" />
Теперь вы должны открыть Asset Explorer с панели инструментов. В левой части Asset Explorer выберите Behavior, и вы увидите, что ваше поведение относится к одному из перечисленных Behaviors, а также к другим, встроенным в Expression Blend. Выберите необходимое поведение и перетащите его на объект, в данном случае
Rectangle , и все готово. Код XAML будет выглядеть примерно так:
<rectangle fill="Green"> <i:interaction.triggers> <i:eventtrigger&g; <local:SomeBehavior /> </i:eventtrigger&g; </interaction:triggers> </rectangle>
Если вы внимательно посмотрите на это, вы заметите, что здесь есть пара пространств имен. Вы найдете их в верхней части документа XAML, которые были вставлены Expression Blend динамически. Дизайнера или креатива это не волнует, но вам, как разработчику, важно понять это. Поведения, как вы можете видеть, — это способ предоставить богатую функциональность, связанную с элементами управления в XAML, которая также, что более важно, проста для разработчиков и разработчиков при создании, поддержке и настройке UX / Design представлений в Приложения Silverlight.
(примечание: эта статья является отредактированной версией раздела главы, которую я написал для названия WROX: Silverlight 4 Professional, ознакомьтесь с ней по адресу :
http://www.wrox.com/WileyCDA/WroxTitle/Professional-Silverlight-4 .productCd-0470650923.html)
Источник:
http://hackingsilverlight.blogspot.com/2010/11/building-and-user-expression-blend.html