WPF触发器(Trigger、DataTrigger、EventTrigger)
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦)。它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作。
WPFtrigger的主要类型有:Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种。从字面意思上我们想大家已经知道个大概,接下来我将还会用实例代码逐一进行介绍。trigger主要运用的场景在Style、ControlTemplate、DataTemplate三个地方。在这些地方可以使用trigger,具体视情况而定。
1.在Style中使用各种trigger
在style中使用的trigger主要是属性的触发器,当属性的值发生改变是将会引发触发器。
a.普通属性trigger 当鼠标滑过时字体变成红色
<CheckBox.Resources>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="Foreground"Value="SkyBlue"/>
<Style.Triggers>
<!--鼠标滑过时字体为红色-->
<Trigger Property="IsMouseOver"Value="True">
<Setter Property="Foreground"Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</CheckBox.Resources>
</CheckBox>
b.普通属性MultiTrigger 当checkbox勾选并且鼠标滑过时字体变成绿色
<CheckBox.Resources>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="Foreground"Value="SkyBlue"/>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsChecked"Value="True"/>
<Condition Property="IsMouseOver"Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Foreground"Value="Green"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</CheckBox.Resources>
</CheckBox>
c.EventTrigger 鼠标划入长度变长 鼠标移出 长度变短
<CheckBox.Resources>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="Foreground"Value="SkyBlue"/>
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="Width"
To="150"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="Width"
To="70"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</CheckBox.Resources>
</CheckBox>
2.在ControlTemplate中使用trigger
在ControlTemplate中使用的trigger主要是在controltemplate中的元素的触发器,当属性的值发生改变是将会引发触发器。
属性为“Border” 的鼠标滑过时背景变色,其他的trigger同上面的style一样 这里就不多举例了
<Button.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Background"Value="Gray"/>
<Setter Property="BorderBrush"Value="Black"/>
<Setter Property="Cursor"Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<StackPanel>
<Border Height="10"Background="Red"></Border>
<Border x:Name="Border"CornerRadius="0"BorderThickness="1"Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter VerticalAlignment="Center"HorizontalAlignment="Center"/>
</Border>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"Value="True">
<Setter TargetName="Border"Property="Background"Value="#FFC2E0FF"/>
<Setter TargetName="Border"Property="BorderBrush"Value="#FF3399FF"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Resources>
</Button>
3.在DataTemplate中使用trigger
在DataTemplate中使用trigger可以根据绑定的数据不同显示不同的内容。
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<Border CornerRadius="0"Margin="1"x:Name="back"MinWidth="70"
Background="Transparent"DataContext="{Binding}"PreviewMouseMove="TreeItem_PreviewMouseMove">
<StackPanel Orientation="Horizontal"Margin="2">
<Image x:Name="BGimage"Source="/Vdc3D.Coms.DModelEditor;component/Images/item.png"Height="15"Width="15"/>
<TextBlock Text="{Binding ShowText}"Margin="2 0"/>
</StackPanel>
<Border.ContextMenu>
<ContextMenu x:Name="menu">
<MenuItem Header="Add Directory"x:Name="menu_addDir"Click="AddDir_Click"DataContext="{Binding}"/>
<MenuItem Header="Add Property"x:Name="menu_addChild"Click="AddChild_Click"DataContext="{Binding}"/>
<MenuItem Header="Edit"Click="Modify_Click"DataContext="{Binding}"/>
<MenuItem Header="Delete"Click="Delete_Click"DataContext="{Binding}"/>
</ContextMenu>
</Border.ContextMenu>
</Border>
<HierarchicalDataTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TreeViewItem}},Path=IsExpanded}"Value="False"/>
<Condition Binding="{Binding IsDir}"Value="True"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter TargetName="BGimage"Property="Source"Value="/Vdc3D.Coms.DModelEditor;component/Images/dir.png"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TreeViewItem}},Path=IsExpanded}"Value="True"/>
<Condition Binding="{Binding IsDir}"Value="True"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter TargetName="BGimage"Property="Source"Value="/Vdc3D.Coms.DModelEditor;component/Images/dir_open.png"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<DataTrigger Binding="{Binding IsDir}"Value="True">
<Setter TargetName="menu_addDir"Property="Visibility"Value="Visible"/>
<Setter TargetName="menu_addChild"Property="Visibility"Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsDir}"Value="False">
<Setter TargetName="menu_addDir"Property="Visibility"Value="Collapsed"/>
<Setter TargetName="menu_addChild"Property="Visibility"Value="Collapsed"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这是一个treeview控件 根据绑定的isdir值不同 可以显示icon是一个目录(文件夹)或者是一个文件,看是不是很简单呢
以上只是简单的介绍了trigger的一些用法,具体的功能大家可以自由发挥,这也是wpf的强大之处
本文来自lhx527099095的博客,原文地址:http://blog.csdn.net/lhx527099095/article/details/8029207
WPF触发器(Trigger、DataTrigger、EventTrigger)相关推荐
- WPF触发器(Trigger)
WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...
- WPF中的触发器(Trigger)
这节来讲一下WPF中的触发器--Trigger.触发器,是指在既定条件或者特殊场景下被触发,从而去执行一个操作.在WPF中,触发器可以分为以下几类:基本触发器(Trigger):事件触发器(Event ...
- MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 举个例子: 现有2个实体- 麻将机 学生.课程,1种联系- 成绩 分别创建 学生表 studen ...
- mysql之触发器trigger
mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) ...
- oracle 数据库 触发器 trigger 语法
http://shixm.iteye.com/blog/401564 关键字: oracle 数据库 触发器 trigger 语法 语法规则: Create [or replace] trigger ...
- SQL入门(3):定义约束/断言assertion/触发器trigger
本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...
- android sqlite触发器,SQLite---使用触发器(Trigger)
背景 当数据库中的数据太多时,往往需要进行清理,将一些过时的数据删除,但是往往找不到合适的时机进行清理.于是SQLite提供了Trigger,当某些事件发生时,可以触发并且进行处理. Trigger ...
- MySQL触发器 trigger学习
触发器:一类特殊的事物.可监视某种数据操作,并触发相关操作(insert/update/delete).表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求. 作用:变化自己主动完毕某些语句 ...
- mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...
问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(tri ...
- mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目
触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...
最新文章
- MIT副教授赵宇飞团队登数学四大顶刊,华人作者中两位是本科生,最小的是00后...
- OEMAddressTable介绍
- [网摘]关于产品运营
- 前端学习(3164):react-hello-react之添加todoList
- dataframe 如何选中某列的一行_PySpark和SparkSQL基础:如何利用Python编程执行Spark(附代码)
- 基础算法 —— 高精度计算 —— 高精度除法
- 常用crc查表法_CRC校验码简介及CRC16的计算方法
- mvc 前段定义变量_3分钟短文 | Laravel blade模板里优雅地定义PHP变量
- Kotlin基础从入门到进阶系列讲解(Android开发) - 总目录
- java astar_JAVA-Astar算法实现
- f分布表完整图a=0.01_桥梁横向分布系数计算方法及案例详解
- Android AIDL 原理解析
- conda install 安装慢,或者直接卡死,这么解决
- 【云宏大讲坛】超融合,融合的不仅是基础架构
- 有感而发20210216
- 进口牛羊肉抄码器厂家OCR扫数字重量累加扫码机冷库进出口牛羊肉抄码机进口冻肉抄码设备 进口牛羊肉抄码枪
- 【报告分享】2021人工智能行业分析研究报告:投资人角度.pdf(附下载链接)...
- ES内部分片处理机制——Segment
- 第十一章 认识与学习BASH【鸟哥linux私房菜学习笔记】
- 给定一个链表,判断链表中是否有环
热门文章
- 【图像融合】基于matlab GUI小波变换彩色图像融合(带面板)【含Matlab源码 782期】
- 【数据分析】基于matlab GUI成绩管理系统【含Matlab源码 256期】
- 获得学士学位的机器学习工程工作
- 对话生成 深度强化学习_通过深度学习与死人对话
- 机器学习算法的差异_我们的机器学习算法可放大偏差并永久保留社会差异
- linux内核数据链路层,Linux网络内核数据帧的接收进程:数据链路层(概念篇)...
- 抖音自动清关注服务器,各位有保留抖音自动关注的代码吗
- Chrome插件GitZip(下载github项目中的部分文件)
- WebSocket 协议 RFC 文档(全中文翻译) 1
- Mac实践--MAC搭建FTP服务器