能否使用样式或模板应用混合行为?

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>

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

3个回答

3

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


1
这是一个损坏的链接。请查看此重复链接 - Mike Fuchs

1

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

更新

这种方法需要更多的工作才能使其生效:问题在于 Behaviors 和 Triggers 只能同时附加到一个对象上。这可能是为什么使用样式应用它们存在限制的原因。要使此功能正常工作,您需要创建某种类型的 Trigger 或 Behavior 工厂。


0
你可以创建一个继承自Rectangle的自定义类,并在那里应用相应的行为。

1
在那种情况下,我甚至不需要行为 - 我可以直接连接事件。不过,我宁愿留给我们的设计师一些事情去做... - Sergey Aldoukhov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接