WPF系列教程(二十九):触发器Triggers、MultiTrggers、EventTrigger——属性触发器、多触发器、事件触发器

使用触发器可以自动完成简单的样式改变。
项目源码

触发器

在Style定义时使用Style.Triggers属性来实现:

<!--设置触发器-->
<Style.Triggers>
   <Trigger Property="Control.IsFocused" Value="True">
       <!--获取焦点的时候,点击按钮-->
       <Setter Property="Control.Foreground" Value="DarkRed"/>
   </Trigger>
</Style.Triggers>

给按钮使用该Style及其触发器:

<Button Name="btn1" Content="Button" Margin="5" VerticalAlignment="Top" Style="{ 
        StaticResource BigFontButton}"/>

当点击按钮,按钮获得焦点时,触发样式“前景色变为深红色”:
在这里插入图片描述
当鼠标点击下方TextBox时,按钮失去焦点,又变回触发之前的样式。
再设置一个触发器:

<Trigger Property="Button.IsPressed" Value="True">
    <Setter Property="Control.Foreground" Value="Blue"/>
</Trigger>

则在按下的时候为蓝色,弹起为红色。

多触发器

设置满足多个触发条件时才触发控件的样式改变。利用MultiTrigger进行定义,用MultiTrigger.Conditions定义多个条件的集合,用MultiTrigger.Setters应用改变的样式:

<Style.Triggers>
   <MultiTrigger>
       <MultiTrigger.Conditions><!--多个条件同时满足才触发-->
           <Condition Property="Control.IsFocused" Value="True"/><!--获得焦点-->
           <Condition Property="Control.IsMouseOver" Value="True"/><!--且鼠标在控件上悬浮-->
       </MultiTrigger.Conditions>
       <MultiTrigger.Setters>
           <Setter Property="Control.Foreground" Value="SkyBlue"/>
       </MultiTrigger.Setters>
   </MultiTrigger>
</Style.Triggers>

结果,只有当按钮获取焦点且鼠标悬停与按钮上方时,才能应用触发器样式改变:
在这里插入图片描述

事件触发器

定义在鼠标进入和离开时用故事板动画改变字体的大小,使得大小的变化为逐渐变化,不是突变。使用EventTrigger属性进行改变:

<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter"><!--事件触发器-->
        <BeginStoryboard>
            <Storyboard><!--故事板,可以让改变从小逐渐变大,而不是突然变大-->
                <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetProperty="FontSize" To="48"/>
                <!--Duration表示花多少时间改变-->
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave"><!--事件触发器-->
        <BeginStoryboard>
            <Storyboard><!--故事板,可以让改变从小逐渐变大,而不是突然变大-->
                <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="FontSize" To="10"/>
                <!--Duration表示花多少时间改变-->
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Style.Triggers>

Guess you like

Origin blog.csdn.net/qq_43511299/article/details/121647977