是否可以使用样式或模板应用混合行为?

时间:2009-08-09 20:59:17

标签: wpf xaml expression-blend

我很喜欢我的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 个答案:

答案 0 :(得分:3)

我遇到了同样的问题而我posted on my blog关于如何创建附加属性来解决Blend SDK的这个缺点。

答案 1 :(得分:1)

我还没有尝试过,但我可能会做的是创建一个可以容纳行为集合的附加属性。在该属性的属性更改处理程序中,我将枚举该集合并将每个行为添加到真实的Interation.Behaviors属性中。它有点乱,但它应该有效。

更新

如果没有更多的工作,这种方法将无法工作:问题是行为和触发器一次只能附加到一个对象。这可能是为什么首先存在使用样式应用它们的限制的原因。要使其工作,您需要创建某种触发器或行为工厂。

答案 2 :(得分:0)

您可以创建自己的类,继承自Rectangle并在那里应用行为。