Статьи

Создание и использование поведенческих смесей


Поведения — это крутой способ добавления функциональности к элементам дизайна 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