代码之家  ›  专栏  ›  技术社区  ›  Sergey Aldoukhov

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

  •  6
  • Sergey Aldoukhov  · 技术社区  · 16 年前

    我对我的混合行为、动作和触发器的小集合非常满意——它们易于使用且功能强大。但我仍然不知道如何避免在每个元素的基础上应用它们。例如,如果我有这样的行为:

    <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 回复  |  直到 15 年前
        1
  •  3
  •   Mark Smeltzer    15 年前

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

        2
  •  1
  •   Samuel Jack    16 年前

    我没有尝试过,但我可能要做的是创建一个附加属性,它可以保存一组行为。在该属性的属性更改处理程序中,我将枚举集合并将每个行为添加到real interaction.behaviors属性。有点乱,但应该管用。

    更新

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

        3
  •  0
  •   Charlie    16 年前

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