(对不起,我知道标题很糟糕;我很乐意接受建议的修订)
我需要一个按钮在按下鼠标按钮时具有鲜明的视觉外观,并在释放鼠标时恢复其原始外观(我特别不是在寻找“切换”行为)。就我而言,我只希望在按下鼠标按钮时背景颜色有所不同。
我找到了几个示例,但是所有示例都遇到了相同的问题:效果直到鼠标离开按钮后才会出现,就像其他事件基于我未特别说明的事件覆盖了背景色一样覆盖。
我已经尝试了好几种方法,或者它们根本不起作用,或者结果被默认的鼠标悬停样式(这是一种浅蓝色)覆盖。
这是我尝试过的一件事:
<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样式优先?