WPF快速指导6:触发器

简介: WPF快速指导6:触发器    本文摘要:    1:属性触发器;    2:数据触发器;    3:事件触发器;     Style、ControlTemplate 和 DataTemplate 都有触发器集合。

WPF快速指导6:触发器
    本文摘要:
    1:属性触发器;
    2:数据触发器;
    3:事件触发器;

    Style、ControlTemplate 和 DataTemplate 都有触发器集合。
    属性触发器只检查WPF从属属性,而数据触发器则可检查任何一种可绑定的属性。属性触发器一般用来检查WPF可视元素的属性,而数据触发器则通常用来检查不可视对象的属性。
    属性触发器:通过此机制,一个属性的更改会在另一个属性中触发即时或动态更改。
    数据触发器:通过此机制,事件会在属性中触发动态更改。
    数据触发器:EventTrigger,它根据事件的引发来启动一组操作,但这类操作仅限于动画。


一:属性触发器

    查看代码片段1:

   <Style TargetType="ListBoxItem">
      <Setter Property="Opacity" Value="0.5" />
      <Setter Property="MaxHeight" Value="75" />
      <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
          <Trigger.Setters>
            <Setter Property="Opacity" Value="1.0" />
          </Trigger.Setters>
        </Trigger>
      </Style.Triggers>
    </Style>

    表示在ListBoxItem的IsSelected属性变为True的时候,其另外一个属性Opacity的值变为1.0。

1.1单个触发器
    代码片段1就是单个触发器。

1.2多个触发器

    可以为ListBoxItem设置多个触发器。

1.3多条件属性触发器

    多条件触发器就是说,同时满足几个条件的时候才触发行为。
    如代码片段2: 

               <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsFocused" Value="True"></Condition>
                        <Condition Property="Content" Value="{x:Null}"></Condition>
                    </MultiTrigger.Conditions>
                    <Setter Property="ToolTip" Value="content is null!"></Setter>
                </MultiTrigger>

二:数据触发器
    使用 DataTrigger,可以在数据对象的属性值与指定的 Value 匹配时设置属性值。例如,在显示 Employee 对象列表时,可能希望前景色根据每个 Employee 的当前出勤情况而变化。(例如,用紫色前景色显示当前正在休假的 Employee。)
    查看代码片段3

       <Window.Resources>
            <c:Places x:Key="PlacesData"/>

            <Style TargetType="ListBoxItem">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=State}" Value="WA">
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Path=Name}" Value="Portland" />
                            <Condition Binding="{Binding Path=State}" Value="OR" />
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Cyan" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>

            <DataTemplate DataType="{x:Type c:Place}">
                <Canvas Width="160" Height="20">
                    <TextBlock FontSize="12"
             Width="130" Canvas.Left="0" Text="{Binding Path=Name}"/>
                    <TextBlock FontSize="12" Width="30"
                 Canvas.Left="130" Text="{Binding Path=State}"/>
                </Canvas>
            </DataTemplate>
        </Window.Resources>

        <StackPanel>
            <TextBlock FontSize="18" Margin="5" FontWeight="Bold"
    HorizontalAlignment="Center">Data Trigger Sample</TextBlock>
            <ListBox Width="180" HorizontalAlignment="Center" Background="Honeydew"
    ItemsSource="{Binding Source={StaticResource PlacesData}}"/>
        </StackPanel>

2.1单条件触发
    以上的DataTrigger就是一个单条件触发器。

2.2多条件触发

    以上的MultiDataTrigger就是一个多条件触发器。


三:事件触发器

    属性触发器用来检查从属属性的值,数据触发器用来检查CLR属性的值,而事件触发器用来监视事件。当一个事件发生的时候,事件触发器就会通过引发相关的动画事件来响应。
    如代码片段4:

    <Style TargetType="ListBoxItem">
      <Setter Property="Opacity" Value="0.5" />
      <Setter Property="MaxHeight" Value="75" />
      <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
          <Trigger.Setters>
            <Setter Property="Opacity" Value="1.0" />
          </Trigger.Setters>
        </Trigger>
        <EventTrigger RoutedEvent="Mouse.MouseEnter">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <DoubleAnimation
                  Duration="0:0:0.2"
                  Storyboard.TargetProperty="MaxHeight"
                  To="90"  />
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>
        <EventTrigger RoutedEvent="Mouse.MouseLeave">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <DoubleAnimation
                  Duration="0:0:1"
                  Storyboard.TargetProperty="MaxHeight"  />
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>
      </Style.Triggers>
    </Style>
Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
目录
相关文章
|
9月前
|
C#
WPF属性---重复样式和触发器
WPF属性---重复样式和触发器
70 0
|
.NET 数据库 C#
WPF触发器(非数据库中的触发器)
原文:WPF触发器(非数据库中的触发器) 一、什么是触发器?触发器(Trigger)就是当某种条件满足后即完成相应逻辑功能的一部分程序组成。在当前的WPF中,Trigger一共有三种类型,它们分别是: (1)属性触发器:其对应的类是Trigger。
1278 0
|
C#
WPF中样式和行为和触发器
原文:WPF中样式和行为和触发器 样式简介:样式(style)是组织和重用格式化选项的重要工具,不是使用重复的标记填充XAML,以便设置外边距、内边距、颜色以及字体等细节。而是创建一系列封装所有这些细节的样式,然后在需要之处通过属性来设置样式。
753 0
|
C#
WPF快速指导13:数据绑定之集合绑定之视图(排序、过滤、分组)
WPF快速指导13:数据绑定之集合绑定之视图(排序、过滤、分组) 本文摘要:1:为什么需要视图; 2:变更集合; 3:排序; 4:过滤筛选; 5:分组; 1:为什么需要视图      一旦 ItemsControl 绑定到数据集合,您可能希望对数据进行排序、筛选或分组。
793 0
|
C# 数据格式
WPF快速指导4:数据绑定之绑定方向与自定义转换器
WPF快速指导4:数据绑定之绑定方向与自定义转换器    本文摘要:    1:绑定目标与绑定源之间的方向;    2:自定义转换器; 1:绑定目标与绑定源之间的方向    该部分的定义MSDN已经描述的非常清楚了,如下:    您可能希望应用程序使用户可以更改数据并将数据传播回源对象。
730 0
|
C#
WPF快速指导5:验证
WPF快速指导5:验证    本文摘要:    1:WPF中的验证处理机制;    2:自定义验证规则;     3:如何显示验证错误信息    4:指定何时进行验证   1:WPF中的验证处理机制    接受用户输入的大多数应用程序都需要具有验证逻辑,以确保用户输入了需要的信息。
745 0
|
.NET C# 开发框架
WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别 本文摘要: 1:什么是路由事件; 2:中断事件路由; 3:自定义路由事件; 4:为什么需要自定义路由事件; 5:什么是冒泡事件和预览事件(隧道事件); 1:什么是路由事件     WPF中的事件为路由事件,所谓路由事件,MSDN定义如下:     功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件。
678 0
|
C# Windows 调度
WPF快速指导12: 线程处理模型
WPF快速指导12: 线程处理模型 本文摘要: 1:理解与UI相关的多线程操作; 2:多个窗口多个线程 3:WPF中的多线程异常 1:理解与UI相关的多线程操作     首先来说说传统Winform。
801 0
|
C# 索引
WPF快速指导3:数据绑定
WPF快速指导3:数据绑定  本文摘要:1:实体类的绑定;2:实体类集合的绑定及DataTemplate;3:自定义的实体类集合,如ObservableDictionary; 4:Path的语法; 1:实体类的绑定          理解WPF数据绑定,首先需要理解接口INotifyCollectionChanged。
848 0
|
C# 数据格式 XML
WPF快速指导1:资源
WPF快速指导1:资源    本文摘要:    1:资源应用场景;    2:静态资源和动态资源;    3:Application.Current.Resources和Application.Current.Resources.MergedDictionaries     4:路径 一:资源的应用场景场景1:格式化界面显示元素    所谓格式化界面显示元素,就是使用统一的风格来定义软件的每个界面。
735 0