我很喜欢我的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>
它可以是样式,模板或其他一些避免行为或动作标记重复的方法。到目前为止我提出的最佳解决方案是为容器创建一个特殊的行为(当附加时,它枚举附加到子事件的子项)。 有什么想法吗?
答案 0 :(得分:3)
我遇到了同样的问题而我posted on my blog关于如何创建附加属性来解决Blend SDK的这个缺点。
答案 1 :(得分:1)
我还没有尝试过,但我可能会做的是创建一个可以容纳行为集合的附加属性。在该属性的属性更改处理程序中,我将枚举该集合并将每个行为添加到真实的Interation.Behaviors属性中。它有点乱,但它应该有效。
如果没有更多的工作,这种方法将无法工作:问题是行为和触发器一次只能附加到一个对象。这可能是为什么首先存在使用样式应用它们的限制的原因。要使其工作,您需要创建某种触发器或行为工厂。
答案 2 :(得分:0)
您可以创建自己的类,继承自Rectangle
并在那里应用行为。