WPF XAML默认按钮样式鼠标事件是否被覆盖?

时间:2019-02-22 16:54:43

标签: wpf xaml

(对不起,我知道标题很糟糕;我很乐意接受建议的修订)

我需要一个按钮在按下鼠标按钮时具有鲜明的视觉外观,并在释放鼠标时恢复其原始外观(我特别不是在寻找“切换”行为)。就我而言,我只希望在按下鼠标按钮时背景颜色有所不同。

我找到了几个示例,但是所有示例都遇到了相同的问题:效果直到鼠标离开按钮后才会出现,就像其他事件基于我未特别说明的事件覆盖了背景色一样覆盖。

我已经尝试了好几种方法,或者它们根本不起作用,或者结果被默认的鼠标悬停样式(这是一种浅蓝色)覆盖。

这是我尝试过的一件事:

<Window.Resources>
    <Style TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsPressed" Value="True">
                <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="Coral" Duration="0:0:2" />
                    </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

此操作的结果是背景变成了珊瑚,但是更改仅在鼠标离开后才可见;当鼠标移到上方时,背景仍为灰蓝色(默认的鼠标移到样式)。另外,活动结束后,按钮将保留为Coral;对于IsPressed = False时刻,我需要一个匹配的触发器,但是,如果我尝试添加一个触发器,则根本不会加载该窗口(抛出标记异常)。

我尝试过使用MouseDown,Button.MouseDown,PreviewMouseDown等方法

<Window.Resources>
    <Style TargetType="Button">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Button.MouseDown">
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="Coral" Duration="0:0:2" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

...那什么也没做。

所以我认为第一种方法是正确的方法,但是为什么鼠标悬停样式会覆盖它呢?如何获得IsPressed样式优先?

0 个答案:

没有答案