【问题标题】:More than one trigger does not work in WPF XAML多个触发器在 WPF XAML 中不起作用
【发布时间】:2020-01-08 02:09:25
【问题描述】:

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

<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>

并且按钮被简单定义为&lt;Button Margin="100,20,100,20" Background="#FF272727" Foreground="Silver"&gt;Write to index&lt;/Button&gt;

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

【问题讨论】:

    标签: .net wpf xaml


    【解决方案1】:

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

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

    To="{x:Null}"
    

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

    【讨论】:

    • 感谢您的清晰解释,这非常有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2013-06-25
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多