WPF:触发器

本文摘要:
    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>
时间: 2024-10-27 02:51:00

WPF:触发器的相关文章

WPF触发器

WPF中有五种触发器.Trigger.MultiTrigger.DataTrigger.MultiDataTrigger.EventTrigger.最近做WPF的项目,需要学习下.参考了好多人的文章. 1.Trigger 单一触发器 1: <Window x:Class="WpfApplication1.StyleTrigger.StyleTrigger" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pr

wpf 触发器理解

(1)属性触发器:其对应的类是Trigger.它在特定关联属性发生变化时被触发.一个属性的更改会在另一个属性中触发即时或动态更改. (2)数据触发器:其对应的类是DataTrigger.它在特定的CLR类型所记录的值发生变化时被触发.事件会在属性中触发动态更改. (3)事件触发器:其对应的类是EventTrigger.它将在特定的路由事件发生时被触发.但这类操作仅限于动画. 在WPF中,每一个可以使用触发器的类中都会有一个Triggers属性.拥有这个属性的类有:FrameworkElement

WPF触发器(非数据库中的触发器)

一.什么是触发器?触发器(Trigger)就是当某种条件满足后即完成相应逻辑功能的一部分程序组成.在当前的WPF中,Trigger一共有三种类型,它们分别是: (1)属性触发器:其对应的类是Trigger.它在特定关联属性发生变化时被触发. (2)数据触发器:其对应的类是DataTrigger.它在特定的CLR类型所记录的值发生变化时被触发. (3)事件触发器:其对应的类是EventTrigger.它将在特定的路由事件发生时被触发. 在WPF中,每一个可以使用触发器的类中都会有一个Trigger

WPF 触发器Triggers

什么是触发器? 触发器提供给程序员一种启动事件的方法:事件的执行不是由程序调用,也不是手工启动,而是当满足某个指定的条件事件来触发. 常用的参数设置: <EventTrigger RoutedEvent="Window.Loaded"> RoutedEvent :用于获取或设置将激活该触发器的路由事件. <EventTrigger.Actions> 该触发器的响应事件. 下方代码表示:当窗体加载时,显示一个窗体变化的动画. 触发事件:Window.Loaded

WPFの触发器详解

例子1 简单触发器Triggers——满足简答的条件,触发 <Window x:Class="Styles.SimpleTriggers" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="SimpleTriggers"

wpf 触发器,属性触发器,事件触发器,事件触发器。

<EventTrigger RoutedEvent="Mouse.MouseEnter"/> <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="false"> <Setter Property="Foreground" TargetName="PART_TextB

WPF触发器(Trigger) - DataTrigger

官方文档中对DataTrigger的介绍 Represents a trigger that applies property values or performs actions when the bound data meets a specified condition. 某词典的翻译: 当绑定的数据满足指定的条件时,应用(指定的)属性或执行操作的触发器 下面我演示一遍官方文档中的示例,根据官网的描述,建立实体类,然后编写前台代码 先来张效果图 通过DataTrigger,将省份为江苏省的

WPF总结

WPF UI布局 模板总结控件可以通过ItemTemplate="{StaticResource Template}"绑定指定的模板: 数据源总结控件可以通过ItemsSource="{Binding Source={StaticResource Resource}}"绑定指定的数据源: 颜色填充<Rectangle Fill="Chartreuse"></Rectangle> WPF资源文件的路径http://www.c

【WPF学习】第三十八章 行为

样式提供了重用一组属性设置的实用方法.它们为帮助构建一致的.组织良好的界面迈出了重要的第一步——但是它们也是有许多限制. 问题是在典型的应用程序中,属性设置仅是用户界面基础结构的一小部分.甚至最基本的程序通常也需要大量的用户界面代码,这些代码与应用程序的功能无关.在许多程序中,用于用户界面任务的代码(如驱动动画.实现平滑效果.维护用户界面状态,以及支持诸如拖放.缩放以及停靠等用户界面特性)无论是在数量山还是复杂性上都超出了业务代码.许多这类代码是通用的,这意味着在创建的每个WPF对象中需要编写相