0

最后我得到了我的自定义按钮,几乎就像我想要它一样。
问题是代码:D(IsChecked是a 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时,都会从 切换truefalse,反之亦然。现在如果发生以下情况

  • IsChecked == 真
  • 用户单击将 IsChecked 切换为 false
  • 鼠标一直在按钮上

那么我希望按钮变成 $MouseOverColor$ 而不是 $ButtonNormalBackground$ 因为第一个MultiDataTrigger.

我的问题是是否可以简化代码并纠正最后一个问题?

提前致谢!

4

1 回答 1

0

您可能有“价值解决策略”问题。DependencyProperty有一套如何解决价值的策略,请参见此处

如果您的动画设置了 的值,Background那么LayoutRoot在您停止动画之前,其他设置器不会产生影响(在这种情况下,设置器被视为“本地值”)。

您可以使用第二个和第三个触发器<StopStoryboard>中的元素。EnterActions请注意,如果在激活触发器时情节提要已经停止,这将在输出窗口中写入警告。

- 或者 -

您可以FillBehavior="Stop"在情节提要中使用。

于 2012-09-23T18:12:24.220 回答