6

我对我的少量 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>

它可以是样式、模板或其他避免行为或动作标记重复的方式。到目前为止,我提出的最佳解决方案是为容器创建一个特殊行为(当附加时,它会枚举附加到子事件的子事件)。有任何想法吗?

4

3 回答 3

3

我遇到了同样的问题,并在我的博客上发布了如何创建附加属性来解决 Blend SDK 的这个缺点。

于 2010-07-28T02:46:41.637 回答
1

我还没有尝试过,但我可能会创建一个可以保存行为集合的附加属性。在该属性的属性更改处理程序中,我将枚举集合并将每个行为添加到真正的 Interation.Behaviors 属性中。这有点混乱,但它应该可以工作。

更新

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

于 2009-10-26T18:00:03.430 回答
0

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

于 2009-08-10T17:31:37.430 回答