首页 > 解决方案 > 多个触发器在 WPF XAML 中不起作用

问题描述

我有一个简单的按钮。我有两个触发器,当鼠标悬停在按钮上或单击按钮时,每个触发器都会淡化按钮的颜色。它最初可以工作,但是一旦单击按钮,IsMouseOver样式的一部分就会停止工作。只有IsPressedthen 有效。样式定义为:

<Style TargetType="Button">
           <Setter Property="OverridesDefaultStyle" Value="True"/>
           <Setter Property="Template">
              <Setter.Value>
                 <ControlTemplate TargetType="Button">
                    <Border
                       Background="{TemplateBinding Background}"
                       BorderBrush="Silver"
                       BorderThickness="0.5"
                       CornerRadius="0">
                       <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                    <ControlTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="True">
                          <Trigger.EnterActions>
                             <BeginStoryboard>
                                <Storyboard>
                                   <ColorAnimation Duration="0:0:0.3" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="White"/>
                                </Storyboard>
                             </BeginStoryboard>
                          </Trigger.EnterActions>
                          <Trigger.ExitActions>
                             <BeginStoryboard>
                                <Storyboard>
                                   <ColorAnimation Duration="0:0:0.3" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="#FF272727"/>
                                </Storyboard>
                             </BeginStoryboard>
                          </Trigger.ExitActions>
                       </Trigger>
                                <Trigger Property="IsPressed" Value="True">
                                    <Trigger.EnterActions>
                             <BeginStoryboard>
                                <Storyboard>
                                   <ColorAnimation Duration="0:0:0.3" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="DarkSlateGray"/>
                                </Storyboard>
                             </BeginStoryboard>
                          </Trigger.EnterActions>
                          <Trigger.ExitActions>
                             <BeginStoryboard>
                                <Storyboard>
                                   <ColorAnimation Duration="0:0:0.3" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="#FF272727"/>
                                </Storyboard>
                             </BeginStoryboard>
                          </Trigger.ExitActions>
                       </Trigger>
                    </ControlTemplate.Triggers>
                 </ControlTemplate>
              </Setter.Value>
           </Setter>
        </Style>

按钮被简单地定义为<Button Margin="100,20,100,20" Background="#FF272727" Foreground="Silver">Write to index</Button>

我查看了其他一些答案,但他们使用了MultiTrigger, and MultiDataTrigger.我已经尝试过的答案,但他们要么没有解决问题,要么让问题变得更糟。我也尝试过切换顺序。它不能解决问题。

标签: .netwpfxaml

解决方案


IsPressed 触发器的退出操作是强制颜色并覆盖悬停触发器。

将 IsPressed Exit 操作的 To 值更改为:

To="{x:Null}"

这将恢复为默认颜色(按钮本身的颜色)并允许悬停再次更改它。


推荐阅读