zoukankan      html  css  js  c++  java
  • 【转】【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/

  • 相关阅读:
    VCL源码修改立即生效
    让C++控制台程序停下来,实现暂停功能
    Ubuntu系统中初次下载Android源码的一点经验
    理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,即消息窗口)
    又发现2个高人写的Delphi图文并茂的消息研究
    0x0118消息就是WM_SYSTIMER
    QT信号槽与Delphi事件的对比
    使用VS2005安装和编译QT4.53源码
    使用SmsManager服务群发短信
    减小VirtualBox虚拟硬盘文件的大小
  • 原文地址:https://www.cnblogs.com/mqxs/p/5489237.html
Copyright © 2011-2022 走看看