我很喜欢我的Blend行为,动作和触发器的小集合 - 它们易于使用且功能强大.但我仍然无法弄清楚如何避免在每个元素的基础上应用它们.例如,如果我有这样的行为:
<Rectangle>
<i:Interaction.Behaviors>
<il:MouseDragElementBehavior/>
</i:Interaction.Behaviors>
</Rectangle>
Run Code Online (Sandbox Code Playgroud)
我的窗口中有一些可拖动的矩形,每个矩形都必须具有可拖动的上述标记.我想做的是能够写出这样的东西:
<Style x:Key="RectangleStyle" TargetType="{x:Type Rectangle}">
<Setter Property="i:Interaction.Behaviors"
Value="il:MouseDragElementBehavior"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
它可以是样式,模板或其他一些避免行为或动作标记重复的方法.到目前为止我提出的最佳解决方案是为容器创建一个特殊的行为(当附加时,它枚举附加到子事件的子项).有任何想法吗?
如果我有一个设置属性的BooleanAnimation,该属性将被锁定,并且不能通过任何其他方式更改.
例:
<EventTrigger
SourceName="myButton"
RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames
Storyboard.TargetName="myCheckBox"
Storyboard.TargetProperty="IsChecked"
FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame
KeyTime="00:00:00"
Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果单击该按钮,则复选框设置为false,但是,如果用户再次尝试检查复选框,则复选框将无响应.无法通过代码设置IsChecked属性(单击按钮后).
我可以创建另一个动画来更新CheckBox,但这不是我需要的行为.
我也尝试过FillBehavior ="Stop",但这只会导致动画无法正常工作.