WPF中的触发器简单总结

简介: 原文 http://blog.sina.com.cn/s/blog_5f2ed5cb0100p3ab.html 触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一个或多个条件执行Setter中的属性改变。

原文 http://blog.sina.com.cn/s/blog_5f2ed5cb0100p3ab.html

触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一个或多个条件执行Setter中的属性改变。因为复用的缘故,Styles是放置触发器的最好位置。但对于每个FrameworkElement来说都有Triggers集合,你也可以放在Triggers集合里。触发器有三种类型:

  属性触发器Property Trigger:当Dependency Property的值发生改变时触发。
  数据触发器Data Trigger:当普通.NET属性的值发生改变时触发。
  事件触发器Event Trigger:当路由时间被触发时调用
 
1.      属性触发器(Property Trigger)
属性触发器是WPF中最常用的触发器类型,因为我们前边说过依赖属性具有垂直变更通知的功能,所以在使用属性触发器时会很方便,而且因为WPF中每个控件超过2/3的属性都是依赖属性,所以它用到的场合更多。属性触发器是在当某个依赖属性的值发生变化时触发执行一个Setter的集合,当属性失去这个值时,这些被触发执行的Setter集合会自动被撤销
例如:注意,属性触发器是用Trigger标识的
        <Trigger Property="IsMouseOver" Value="true">
              <Setter Property="Cursor" Value="Hand" />
        </Trigger>
        <Trigger Property="IsSelected" Value="true">
              <Setter TargetName="brdbutton"
                      Property="Background"
                      Value="{StaticResource TabRedBrush}" />
         </Trigger>
属性触发器还经常被用在做数据验证时用来显示验证错误信息。在WPF学习之绑定里的Validation部分我们附有用属性触发器来判断是否有验证错误并显示相应验证错误信息的示例
<TextBox Style="{StaticResource validateTextBoxStyle}">
   <TextBox.Text>
       <Binding UpdateSourceTrigger="PropertyChanged" Path="Department">
           <Binding.ValidationRules>
              <local:JpgValidationRule/>
         </Binding.ValidationRules>
       </Binding>
  </TextBox.Text>
</TextBox>
<Style x:Key="validateTextBoxStyle" TargetType="{x:Type TextBox}">
    <Setter Property="Width" Value="300" />
    <Style.Triggers>
       <Trigger Property="Validation.HasError" Value="True">
         <Setter Property="Background" Value="Red"/>
               <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
      </Trigger>
    </Style.Triggers>
</Style>
 
2.      数据触发器Data Trigger
数据触发器和属性触发器除了面对的对象类型不一样外完全相同。数据触发器是来检测非依赖属性------也就是用户自定义的.NET属性-----的值发生变化时来触发并调用符合条件的一系列Setter集合。
例如:
  <DataTrigger Binding="{Binding Path=Class}"
               Value="1">
                <Setter Property="Background"
                        Value="{StaticResource ExpanderBackgroundOneBrush}" />
                <Setter Property="Background"
                        TargetName="tgbHeader"
                        Value="{StaticResource ExpanderToggleBorderBackgroundOneBrush}" />
  </DataTrigger>
3.      事件触发器 Event Trigger
事件触发器,顾名思义是在某个事件被触发时来调用这个触发器的相关操作。因为WPF提供了用XAML来标记对象,事件等,所以其提供了一些在普通.NET开发中看似没用的属性例如IsMouseOver, IsPressed等,这是为了XAML来用的,使其可以很方便的通过某个属性来判断状态,也方便了Property Trigger的应用。而作为事件触发器来说,它所做的事情和Property Trigger类似,不过是它的内部不能是简单的Setter集合,而必须是TriggerAction的实例。
例如:
  <EventTrigger RoutedEvent="Mouse.MouseEnter"
                SourceName="grdNormalButton">
                <BeginStoryboard Storyboard="{StaticResource NormalButton_MouseEnter}" />
   </EventTrigger> 
4.      MultiDataTrigger & MultiTrigger
截至目前我们讨论的都是针对单个条件的触发器,也就是说当某一个条件满足时就会触发。而现实中我们可能需要满足很多个条件时才触发一系列操作,这个时候就需要用到MultiDataTrigger或MultiTrigger。MutliDataTrigger和MultiTrigger都具有一个Conditions集合用来存放一些触发条件,这里的Condition之间是and的关系,当所有条件都满足时,Setter集合才会被调用。根据名字就可以看清楚:MultiDataTrigger用来实现多个数据触发器(只用于普通.NET属性)满足条件时调用;MultiTrigger用来实现多个属性触发器(用于依赖属性)满足条件时调用
例如:
<MultiTrigger>
       <MultiTrigger.Conditions>
            <Condition Property="Visibility " Value="Visible" />
            <Condition Property="IsEnabled" Value="true" />
       </MultiTrigger.Conditions>
       <Setter Property="BorderBrush" Value="Red"/>
       <Setter Property="FontSize" Value="14" />
       <Setter Property="FontWeight" Value="Bold" />
       <Setter Property="Foreground" Value="Red" />
</MultiTrigger>
同样的,你也可以用MultiDataTrigger来对自定义的属性进行多条件的与关系操作

 

目录
相关文章
|
9月前
|
C#
WPF属性---重复样式和触发器
WPF属性---重复样式和触发器
70 0
|
.NET 数据库 C#
WPF触发器(非数据库中的触发器)
原文:WPF触发器(非数据库中的触发器) 一、什么是触发器?触发器(Trigger)就是当某种条件满足后即完成相应逻辑功能的一部分程序组成。在当前的WPF中,Trigger一共有三种类型,它们分别是: (1)属性触发器:其对应的类是Trigger。
1280 0
|
C#
WPF中样式和行为和触发器
原文:WPF中样式和行为和触发器 样式简介:样式(style)是组织和重用格式化选项的重要工具,不是使用重复的标记填充XAML,以便设置外边距、内边距、颜色以及字体等细节。而是创建一系列封装所有这些细节的样式,然后在需要之处通过属性来设置样式。
754 0
|
数据可视化 C# .NET
《Programming WPF》翻译 第5章 6.触发器
原文:《Programming WPF》翻译 第5章 6.触发器 目前为止,我们已经看到样式,作为一个Setter元素的集合。当应用一个样式时,在Setter元素中描述的设置不会无条件地应用(除非复写每一个设置的实例)。
796 0
|
C# 前端开发 .NET
WPF-触发器
原文 http://www.cnblogs.com/luluping/archive/2011/07/26/2117681.html WPF快速指导6:触发器     本文摘要:     1:属性触发器;     2:数据触发器;     3:事件触发器;     Style、ControlTemplate 和 DataTemplate 都有触发器集合。
821 0
|
.NET C# 数据安全/隐私保护
wpf中的触发器详解
原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会涉及触发器的使用。
1347 0
|
C# 前端开发 .NET
WPF快速指导6:触发器
WPF快速指导6:触发器    本文摘要:    1:属性触发器;    2:数据触发器;    3:事件触发器;     Style、ControlTemplate 和 DataTemplate 都有触发器集合。
605 0
|
18天前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
|
4月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
65 1