Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to apply Blend behavior using style or template?

I'm very happy with my small collection of Blend behaviors, actions and triggers - they are easy to use and powerful. But I still can't figure out how to avoid applying them on per element basis. For example, if I have a behavior as such:

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

and I have a few draggable rectangles in my Window, each of them has to have the above markup to be draggable. What I would like to do is to be able to write something like this:

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

It could be style, template, or some other way to avoid behavior or action markup repetition. The best solution I came up so far is creating a special behavior for the container (when attached, it enumerates children attaching to the children events). Any ideas?

like image 489
Sergey Aldoukhov Avatar asked Aug 09 '09 20:08

Sergey Aldoukhov


2 Answers

I ran into the same problem and I posted on my blog on how to create an attached property to work around this shortcoming of the Blend SDK.

like image 88
Mark Smeltzer Avatar answered Sep 20 '22 09:09

Mark Smeltzer


I haven't tried it, but what I would probably do is create an attached property that can hold a collection of Behaviors. In the property changed handler of that property, I would enumerate the collection and add each of the behaviours to the real Interation.Behaviors property. It's a bit messy, but it ought to work.

Update

This approach won't work without a good deal more work: the problem is that Behaviors and Triggers can only be attached to one object at a time. This is probably why the limitation on applying them using a style exists in the first place. To get this to work you would need to create some kind of Trigger or Behavior factory.

like image 29
Samuel Jack Avatar answered Sep 23 '22 09:09

Samuel Jack