最后我的自定义按钮几乎就像我希望它行动一样
问题是代码:D(IsChecked
是DependencyProperty
)
<ControlTemplate.Triggers>
<!-- EventTriggers for LMBUp/LMBDown/MouseEnter/MouseLeave -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="False"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MouseEnter}"/>
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource MouseLeave}"/>
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="LayoutRoot" Property="Background" Value="Red"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="LayoutRoot" Property="Background" Value="Red"/>
</MultiDataTrigger>
</ControlTemplate.Triggers>
我觉得它有点“肮脏”,并没有像预期的那样充分发挥作用。
每次用户点击按钮IsChecked
时,都会从true
切换到false
,反之亦然。
现在如果发生以下情况
然后我希望按钮变成$ MouseOverColor $而不是$ ButtonNormalBackground $因为第一个MultiDataTrigger
。
我的问题是,是否可以简化代码并纠正最后一个问题?
提前致谢!
答案 0 :(得分:0)
您可能遇到“价值解决策略”问题。 DependencyProperty
有一套如何解决价值的策略see here。
如果您的动画设置了Background
LayoutRoot
的值,那么在停止动画之前其他设置器将不起作用(在这种情况下,设置器被视为“本地值”)。
您可以在<StopStoryboard>
第二个和第三个触发器中使用EnterActions
元素。请注意,如果在激活触发器时故事板已经停止,则会在输出窗口中写入警告。
- 可选地 -
您可以在故事板中使用FillBehavior="Stop"
。