【转】【WPF】WPF样式(Style)—触发器

样式(Styles)由三部分构成:设置器(Setter)、触发器(Triggers)、资源(Resources)。

(1)触发器,让样式的使用更加准确、灵活和高效。

(2)触发器(Triggers)主要分为三类,属性触发器(检查从属属性即WPF元素自身属性)、数据触发器(检查任意可绑定的属性)、事件触发器(用于监听事件)。

属性触发器

  检查从属属性的值,即WPF元素自身属性。比如按钮的内容、字体的大小、颜色等等。

    <Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <Trigger Property="Content" Value="按钮">
                    <Setter Property="ToolTip" Value="这是一个按钮">                   </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

多属性触发器

           <Window.Resources>
               <Style TargetType="Button">
                     <Style.Triggers>
                              <Trigger Property="Content" Value="按钮">
                                     <Setter Property="ToolTip" Value="这是一个按钮"></Setter>
                             </Trigger>
                             <Trigger Property="Content" Value="Button">
                                    <Setter Property="ToolTip" Value="This is a button"></Setter>
                            </Trigger>
                     </Style.Triggers>
                </Style>
            </Window.Resources> 

 

多条件属性触发器 

  <Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <MultiTrigger>
                    <!--条件列表-->
                    <MultiTrigger.Conditions>
                        <Condition Property="Content" Value="按钮"></Condition>
                        <Condition Property="Visibility" Value="Visible"></Condition>
                    </MultiTrigger.Conditions>
                    <!--样式-->
                    <Setter Property="ToolTip" Value="这是一个可见按钮"></Setter>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
数据触发器 

可以检查任意可绑定的属性,比如CLR对象属性、XPath声明等。相对于属性触发器,数据触发器通常用来检查不可见的对象属性。

    <Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Name}" Value="李宝亨">
                        <Setter Property="Foreground" Value="Tomato"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Content="{Binding Path=Name}" Height="23" Margin="103,94,120,84" Name="button1" Width="75"/>
    </Grid>
定义的Person类
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new Person("李宝亨","21");        
        }
        class Person
        {
            string _Name;
            public string Name
            {
                get { return _Name; }
                set { _Name = value; }
            }
            string _Age;
            public string Age
            {
                get { return _Age; }
                set { _Age = value; }
            }
            public Person(string name,string age)
            {
                _Name = name;
                _Age = age;
            }
        }
    }
多条件数据触发器
    <Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <MultiDataTrigger>
                    <!--条件列表-->
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=Name}" Value="李宝亨"/>
                        <Condition Binding="{Binding Path=Age}" Value="21"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Foreground" Value="Tomato"/>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Content="{Binding Path=Name}" Height="23" Margin="103,94,120,84" Name="button1" Width="75"/>
    </Grid>
事件触发器

事件触发器用来监听事件。当一个事件发生时,事件触发器就会引发相关的动画事件来进行响应。

   <Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <!--事件触发器-->
                <EventTrigger RoutedEvent="MouseEnter">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.1"  Duration="0:0:3"></DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

原文地址:http://tianzengyan.blog.163.com/blog/static/1675840912012920105524490/

原文地址:https://www.cnblogs.com/mqxs/p/5489237.html