WPF中有种叫做触发器的东西(记住不是数据库的trigger哦)。它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作。

WPFtrigger的主要类型有:Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种。从字面意思上我们想大家已经知道个大概,接下来我将还会用实例代码逐一进行介绍。trigger主要运用的场景在Style、ControlTemplate、DataTemplate三个地方。在这些地方可以使用trigger,具体视情况而定。

1.在Style中使用各种trigger

在style中使用的trigger主要是属性的触发器,当属性的值发生改变是将会引发触发器。

a.普通属性trigger  当鼠标滑过时字体变成红色

<span>  </span><CheckBox Content="Style Trigger MouseOver Red"> <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勾选并且鼠标滑过时字体变成绿色

<span>  </span><CheckBox Content="Style MultiTrigger Checked and MouseOver Green "> <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 Content="Style EventTrigger " Width="70" HorizontalAlignment="Left"> <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 Content="ControlTemplate" Width="120" Height="30"> <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 Name="_tree" Margin="0" BorderThickness="0" VerticalAlignment="Stretch" Background="Transparent" ItemsSource="{Binding Children}" > <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的强大之处

转载于:https://www.cnblogs.com/Im-Victor/p/10680594.html

WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种相关推荐

  1. WPF触发器(Trigger)

    WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...

  2. WPF: WPF 中的 Triggers 和 VisualStateManager

    在之前写的这篇文章 WPF: 只读依赖属性的介绍与实践 中,我们介绍了在 WPF 自定义控件中如何添加只读依赖属性,并且使其结合属性触发器 (Trigger) 来实现对控件样式的改变.事实上,关于触发 ...

  3. WPF 中的 loaded 事件和 Initialized 事件

    在 WPF 中, 控件有 Loaded 和 Initialized 两种事件. 初始化和加载控件几乎同时发生, 因此这两个事件也几乎同时触发. 但是他们之间有微妙且重要的区别. 这些区别很容易让人误解 ...

  4. WPF中的触发器(Trigger)

    这节来讲一下WPF中的触发器--Trigger.触发器,是指在既定条件或者特殊场景下被触发,从而去执行一个操作.在WPF中,触发器可以分为以下几类:基本触发器(Trigger):事件触发器(Event ...

  5. mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...

    问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(tri ...

  6. MySQL中的触发器(trigger)

    触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL,也不需要手动启动,当一个预定义的事件发生的时候,就会被MySQL自动调用. ...

  7. [转载]WPF – 使用触发器

    WPF提供了很重要的一个东西就是绑定Binding, 它帮助我们做了很多事情,这个我们在WPF学习之绑定这篇里边有讲过.对于Binding我们可以设置其绑定对象,关系,并通过某种规则去验证输入,或者转 ...

  8. WPF – 使用触发器

    WPF提供了很重要的一个东西就是绑定Binding, 它帮助我们做了很多事情,这个我们在WPF学习之绑定这篇里边有讲过.对于Binding我们可以设置其绑定对象,关系,并通过某种规则去验证输入,或者转 ...

  9. 闲话WPF之二四(WPF中的ControlTemplate [2])

    前面关于ControlTempalte的Post当中,只说明了如何定义的外观.如果对于很复杂的自定义控件,通常我们还需要在ControlTemplate使用Resource.很显然,Resource的 ...

最新文章

  1. LINUX进程调度分析源码,Linux 实时调度(源码分析)
  2. FastDFS之Linux下搭建
  3. Python 数据分析包:pandas 基础
  4. eigrp配置实验_思科CCIE认证技术详解IPv6协议下的静态路由配置
  5. C++文件操作之get/getline(待学)
  6. 检测session用户信息跳转首页界面
  7. 程序员过关斩将--作为一个架构师,我是不是应该有很多职责?
  8. Android 自定义环形圆形显示统计数据z
  9. java日历类add方法_Java日历setFirstDayOfWeek()方法与示例
  10. 欧洲杯推动夜间消费发展 便利蜂晚20时-凌晨2时服务人次创新高
  11. 英伟达美女工程师:AI从业者要不要读博?要不要自己创业?
  12. Javascript预解析、代码执行
  13. 从华住遭遇“抄袭” 看酒店行业互联网发展现状
  14. 清除计算机用户缓存,如何在Windows 7中清除内存缓存,释放电脑空间?
  15. 设计师配色宝典!教你从零开始学配色(一)
  16. hybird简介以及安卓应用hybird初体验
  17. 批量tracert脚本
  18. d3d透视逆向篇:第4课 方法一之D3D9游戏黑屏优化1 HOOK
  19. 谈谈 2020 年程序员收入报告
  20. oracle 10 dbca第12步,第10步:DBCA创建实例

热门文章

  1. MySQL事务与存储过程
  2. java连接数据库核心代码
  3. Jenkins与SVN持续集成
  4. How are you vs How are you doing
  5. MOSA 4600 Plus IP PBX FAQ(应用常见知识点-故障排除)(2)
  6. .NET简谈组件程序设计之(详解NetRemoting结构)
  7. Oracle认证成功获取方案
  8. win10 IIS(互联网信息服务) 及 外网访问tomcat
  9. Linux网络基础1
  10. js实现文件切片上传,断点续传