Можно ли применить поведение Blend, используя стиль или шаблон? - PullRequest
6 голосов
/ 10 августа 2009

Я очень доволен своей небольшой коллекцией поведений, действий и триггеров Blend - они просты в использовании и эффективны. Но я все еще не могу понять, как избежать их применения для каждого элемента. Например, если у меня такое поведение:

<Rectangle>
    <i:Interaction.Behaviors>
        <il:MouseDragElementBehavior/>
    </i:Interaction.Behaviors>
</Rectangle>

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

<Style x:Key="RectangleStyle" TargetType="{x:Type Rectangle}">
    <Setter Property="i:Interaction.Behaviors" 
        Value="il:MouseDragElementBehavior"/>
</Style>

Это может быть стиль, шаблон или какой-то другой способ избежать повторения разметки поведения или действия. Лучшее решение, которое я придумал, - это создание специального поведения для контейнера (когда он присоединен, он перечисляет дочерние объекты, присоединяющиеся к дочерним событиям). Есть идеи?

Ответы [ 3 ]

3 голосов
/ 28 июля 2010

Я столкнулся с той же проблемой, и я разместил в своем блоге информацию о том, как создать прикрепленное свойство, чтобы обойти этот недостаток Blend SDK.

1 голос
/ 26 октября 2009

Я не пробовал, но, вероятно, я бы создал присоединенное свойство, которое может содержать коллекцию поведений. В обработчике изменения свойства этого свойства я бы перечислил коллекцию и добавил каждое из поведений в реальное свойство Interation.Behaviors. Это немного грязно, но это должно сработать.

Обновление

Этот подход не будет работать без большого количества дополнительной работы: проблема в том, что Поведения и Триггеры могут быть присоединены только к одному объекту за один раз. Вероятно, поэтому в первую очередь существует ограничение на их применение в стиле. Чтобы заставить это работать, вам нужно создать какую-то фабрику триггеров или поведения.

0 голосов
/ 10 августа 2009

Вы можете создать свой собственный класс, который наследуется от Rectangle, и применить к нему поведение.

...