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>

分类:默认分类 时间:2012-01-07 人气:3
本文关键词:
分享到:

相关文章

  • WPF 4 开发Windows 7 跳转列表(JumpList) 2012-01-13

    在之前写过的《Windows 7 任务栏开发系列》中我们通过Visual Studio 2008 借助微软提供的Windows API Code Pack 对应用程序的任务栏进行开发,即将到来的Visual Studio 2010 为我们提供了更方便的开发方式,新版本的WPF 4 只需要通过XAML 代码即可实现Windows 7 任务栏的特性。本篇将针对JumpList(跳转列表)进行介绍,同时体验下.net framework 4.0 的新功能。 用XAML 编写JumpList 在WPF

  • 利用WPF自己做的全文翻译小工具 2012-04-21

    WPF缩写为Windows Presentation Foundation的缩写 ,其原来代号为“Avalon”,因“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。WPF是微软新一代图形系统,运行在.net framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于directx 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。 程

  • WPF判断surface+win8下的横屏 竖屏状态 2012-08-04

    下面我们一起来看一个WPF中判断surface+win8下的横屏 竖屏状态的一些方法整理,希望此方法来给各位朋友带来一些帮助哦。 今天在做surface2+win8.1的一个wpf程序,程序固定了分辨率和高度宽度了,也就是说直接不支持竖屏模式了。 当设备从横屏切换到竖屏时,WPF程序变小,有些控件被覆盖,当从竖屏重新切换到横屏时,程序不会变成原来的大小,还是在竖屏时的大小。 注:该程序外面是window,里面是page,发现page里面的控件会被覆盖 但是在竖屏模式下怎么提示用户那? 找到了下面

  • 用WPF搭建自己的P2P 播放器 2012-08-08

    本次是用WPF实现的是一款基于BT协议的P2P 播放器。内核是用vlc来实现。结果辛辛苦苦做了半天结果发现用wpf不能满足公司一些需求。 所以搁浅,专用winform去开发,主要2个原因: 1、界面美观时发现渲染视频的时候会有问题,这个问题等会会讲。 2、主要原因如果wpf这个程序开发完成是不能内嵌到网页的。因为后续还要要开发IE ActiveX 插件。然后总监就说:那就不用wpf了,转用winform。 我只能呵呵!呵呵呵呵! wpf我一窍不通,之前完全没接触过。做出这个效果已是我最大能力了。

  • WPF:向客户端发出某一属性值已更改的通知INotifyPropertyChanged接口 2012-08-21

    Person.cs using System.ComponentModel; namespace _01_INotifyPropertyChanged { class Person:INotifyPropertyChanged { private double height; private double weight; public double Height { set { this.height = value; } get { return height; } } public doub

  • WPF-控件SAP焦点 2012-09-07

    WPF利用焦点框的形式在控件周围显示出来,定义一个自定义AdornerDecorator,为控件创建一个AdornerLayer,然后在AdornerLayer上定义自定义的装饰器样式即可。 先上效果图: 1.新建类,命名为:DecoratorHelper.cs,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; usin

  • WPF 中编写具有玻璃效果主题的程序技巧(Aero Glass) 2013-02-16

    Windows 7 操作系统默认具有一款玻璃效果主题(Aero Glass)。如果选择了该款主题,所有的应用程序标题栏都会处于玻璃透明效果(如下图)。这个功能是由Desktop Window Manager(DWM)服务支持的。   默认情况下,我们编写的应用程序在Windows 7 中也只有标题栏和窗口框架会具备玻璃效果,其他区域仍是不透明状态(如下图)。如果想将程序整体都改为上图IE 窗口的效果,可以使用DWM API 将玻璃区域进行扩展。 首先,从dwmapi.dll 中调取DwmExte

  • asp.net中WPF应用程序入口函数(Main函数)小结 2013-03-16

    下文为各位介绍一个asp.net中WPF应用程序入口函数(Main函数)小结,希望这个例子可以帮助到各位哦。 Windows窗体应用程序的入口函数在Program.cs文件中,但WPF应用程序没有这个文件,WPF应用程序入口函数在哪里呢?手工添加一个入口函数,生成项目,出错: 原来WPF应用程序入口函数在objReleaseApp.g.cs文件中: 程序代码 代码如下 复制代码 public partial class App : System.Windows.Application { ///

  • WPF中TextBox控件对于鼠标单击获取焦点后的全选 2013-04-07

    本文章分享关于WPF中TextBox控件对于鼠标单击获取焦点后的全选效果,有需要了解的同学可参考一下。 程序代码 代码如下 复制代码 void OnLostFocus(object sender, RoutedEventArgs e) { TextBox tb = e.Source as TextBox; tb.PreviewMouseDown += new MouseButtonEventHandler(OnPreviewMouseDown); } void OnPreviewMouseDow

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.029 (s). 10 q(s)