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

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

1.在Style中使用各种trigger

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

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

  1. <span> </span><CheckBox Content="Style Trigger MouseOver Red">
  2. <CheckBox.Resources>
  3. <Style TargetType="{x:Type CheckBox}">
  4. <Setter Property="Foreground" Value="SkyBlue"/>
  5. <Style.Triggers>
  6. <!--鼠标滑过时字体为红色-->
  7. <Trigger Property="IsMouseOver" Value="True">
  8. <Setter Property="Foreground" Value="Red"/>
  9. </Trigger>
  10. </Style.Triggers>
  11. </Style>
  12. </CheckBox.Resources>
  13. </CheckBox>

b.普通属性MultiTrigger  当checkbox勾选并且鼠标滑过时字体变成绿色

  1. <span> </span><CheckBox Content="Style MultiTrigger Checked and MouseOver Green ">
  2. <CheckBox.Resources>
  3. <Style TargetType="{x:Type CheckBox}">
  4. <Setter Property="Foreground" Value="SkyBlue"/>
  5. <Style.Triggers>
  6. <MultiTrigger>
  7. <MultiTrigger.Conditions>
  8. <Condition Property="IsChecked" Value="True" />
  9. <Condition Property="IsMouseOver" Value="True" />
  10. </MultiTrigger.Conditions>
  11. <Setter Property="Foreground" Value="Green"/>
  12. </MultiTrigger>
  13. </Style.Triggers>
  14. </Style>
  15. </CheckBox.Resources>
  16. </CheckBox>

c.EventTrigger 鼠标划入长度变长 鼠标移出 长度变短

  1. <CheckBox Content="Style EventTrigger " Width="" HorizontalAlignment="Left">
  2. <CheckBox.Resources>
  3. <Style TargetType="{x:Type CheckBox}">
  4. <Setter Property="Foreground" Value="SkyBlue"/>
  5. <Style.Triggers>
  6. <EventTrigger RoutedEvent="Mouse.MouseEnter">
  7. <EventTrigger.Actions>
  8. <BeginStoryboard>
  9. <Storyboard>
  10. <DoubleAnimation
  11. Duration="0:0:0.2"
  12. Storyboard.TargetProperty="Width"
  13. To="" />
  14. </Storyboard>
  15. </BeginStoryboard>
  16. </EventTrigger.Actions>
  17. </EventTrigger>
  18. <EventTrigger RoutedEvent="Mouse.MouseLeave">
  19. <EventTrigger.Actions>
  20. <BeginStoryboard>
  21. <Storyboard>
  22. <DoubleAnimation
  23. Duration="0:0:0.2"
  24. Storyboard.TargetProperty="Width"
  25. To="" />
  26. </Storyboard>
  27. </BeginStoryboard>
  28. </EventTrigger.Actions>
  29. </EventTrigger>
  30. </Style.Triggers>
  31. </Style>
  32. </CheckBox.Resources>
  33. </CheckBox>

2.在ControlTemplate中使用trigger

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

属性为“Border” 的鼠标滑过时背景变色,其他的trigger同上面的style一样 这里就不多举例了

  1. <Button Content="ControlTemplate" Width="" Height="">
  2. <Button.Resources>
  3. <Style TargetType="{x:Type Button}">
  4. <Setter Property="Background" Value="Gray"/>
  5. <Setter Property="BorderBrush" Value="Black"/>
  6. <Setter Property="Cursor" Value="Hand"/>
  7. <Setter Property="Template">
  8. <Setter.Value>
  9. <ControlTemplate TargetType="{x:Type Button}">
  10. <StackPanel>
  11. <Border Height="" Background="Red"></Border>
  12. <Border x:Name="Border" CornerRadius="" BorderThickness="" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}">
  13. <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
  14. </Border>
  15. </StackPanel>
  16.  
  17. <ControlTemplate.Triggers>
  18. <Trigger Property="IsMouseOver" Value="True">
  19. <Setter TargetName="Border" Property="Background" Value="#FFC2E0FF"/>
  20. <Setter TargetName="Border" Property="BorderBrush" Value="#FF3399FF"/>
  21. </Trigger>
  22. </ControlTemplate.Triggers>
  23. </ControlTemplate>
  24. </Setter.Value>
  25. </Setter>
  26. </Style>
  27. </Button.Resources>
  28. </Button>

3.在DataTemplate中使用trigger

在DataTemplate中使用trigger可以根据绑定的数据不同显示不同的内容。

  1. <TreeView Name="_tree" Margin="" BorderThickness="" VerticalAlignment="Stretch" Background="Transparent" ItemsSource="{Binding Children}" >
  2. <TreeView.ItemTemplate>
  3. <HierarchicalDataTemplate ItemsSource="{Binding Children}">
  4. <Border CornerRadius="" Margin="" x:Name="back" MinWidth=""
  5. Background="Transparent" DataContext="{Binding}" PreviewMouseMove="TreeItem_PreviewMouseMove">
  6. <StackPanel Orientation="Horizontal" Margin="">
  7. <Image x:Name="BGimage" Source="/Vdc3D.Coms.DModelEditor;component/Images/item.png" Height="" Width="" />
  8. <TextBlock Text="{Binding ShowText}" Margin="2 0"/>
  9. </StackPanel>
  10. <Border.ContextMenu>
  11. <ContextMenu x:Name="menu" >
  12. <MenuItem Header="Add Directory" x:Name="menu_addDir" Click="AddDir_Click" DataContext="{Binding}"/>
  13. <MenuItem Header="Add Property" x:Name="menu_addChild" Click="AddChild_Click" DataContext="{Binding}"/>
  14. <MenuItem Header="Edit" Click="Modify_Click" DataContext="{Binding}"/>
  15. <MenuItem Header="Delete" Click="Delete_Click" DataContext="{Binding}"/>
  16. </ContextMenu>
  17. </Border.ContextMenu>
  18. </Border>
  19. <HierarchicalDataTemplate.Triggers>
  20. <MultiDataTrigger>
  21. <MultiDataTrigger.Conditions>
  22. <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TreeViewItem}},Path=IsExpanded}" Value="False"/>
  23. <Condition Binding="{Binding IsDir}" Value="True"/>
  24. </MultiDataTrigger.Conditions>
  25. <MultiDataTrigger.Setters>
  26. <Setter TargetName="BGimage" Property="Source" Value="/Vdc3D.Coms.DModelEditor;component/Images/dir.png" />
  27. </MultiDataTrigger.Setters>
  28. </MultiDataTrigger>
  29. <MultiDataTrigger>
  30. <MultiDataTrigger.Conditions>
  31. <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TreeViewItem}},Path=IsExpanded}" Value="True"/>
  32. <Condition Binding="{Binding IsDir}" Value="True"/>
  33. </MultiDataTrigger.Conditions>
  34. <MultiDataTrigger.Setters>
  35. <Setter TargetName="BGimage" Property="Source" Value="/Vdc3D.Coms.DModelEditor;component/Images/dir_open.png" />
  36. </MultiDataTrigger.Setters>
  37. </MultiDataTrigger>
  38. <DataTrigger Binding="{Binding IsDir}" Value="True">
  39. <Setter TargetName="menu_addDir" Property="Visibility" Value="Visible"/>
  40. <Setter TargetName="menu_addChild" Property="Visibility" Value="Visible"/>
  41. </DataTrigger>
  42. <DataTrigger Binding="{Binding IsDir}" Value="False">
  43. <Setter TargetName="menu_addDir" Property="Visibility" Value="Collapsed"/>
  44. <Setter TargetName="menu_addChild" Property="Visibility" Value="Collapsed"/>
  45. </DataTrigger>
  46. </HierarchicalDataTemplate.Triggers>
  47. </HierarchicalDataTemplate>
  48. </TreeView.ItemTemplate>
  49. </TreeView>
这是一个treeview控件 根据绑定的isdir值不同 可以显示icon是一个目录(文件夹)或者是一个文件,看是不是很简单呢

以上只是简单的介绍了trigger的一些用法,具体的功能大家可以自由发挥,这也是wpf的强大之处

 

WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种的更多相关文章

  1. WPF触发器(Trigger、DataTrigger、EventTrigger)

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

  2. WPF中触发器(Trigger、DataTrigger)使用动画最简单的方式EnterActions和ExitsActions

    1.当鼠标移入后执行某个动画: <Style TargetType="{x:Type StackPanel}"> <Setter Property="R ...

  3. WPF触发器(Trigger)

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

  4. wpf中的触发器详解

    原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...

  5. wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)

    2010-03-24 16:19:07|  分类: WPF相关 |  标签: |字号大中小 订阅     wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2  简单 ...

  6. WPF: WPF 中的 Triggers 和 VisualStateManager

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

  7. WPF触发器(Trigger) - DataTrigger

    官方文档中对DataTrigger的介绍 Represents a trigger that applies property values or performs actions when the ...

  8. WPF中的触发器简单总结

    原文 http://blog.sina.com.cn/s/blog_5f2ed5cb0100p3ab.html 触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一 ...

  9. WPF中样式和行为和触发器

    原文:WPF中样式和行为和触发器 样式简介:样式(style)是组织和重用格式化选项的重要工具,不是使用重复的标记填充XAML,以便设置外边距.内边距.颜色以及字体等细节.而是创建一系列封装所有这些细 ...

随机推荐

  1. 用Python开发小学二年级口算自动出题程序

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 武汉光谷一小二年级要求家长每天要给小孩出口算题目,让孩子练习. 根据老师出题要求编写了Python程序 ...

  2. 一招明白URL和URI的区别

    URL和URI的区别(示例): URL[统一资源定位器]: http://localhost:8080/api/account/queryAccountInfo URI[统一资源定位符]: /api/ ...

  3. CodeForces 91B Queue

    题目链接:http://codeforces.com/contest/91/problem/B 题目大意: 有n头大象排队买票,第i头大象的年龄为ai,如果有比他年轻的大象排在他前面,这头大象就会非常 ...

  4. IRepository<Developer> repository 出现 Abp.Domain.Repositories.IRepository which was not registered.

    “/”应用程序中的服务器错误. Can't create component 'SWJ.SSO.DomainServices.TestService' as it has dependencies t ...

  5. Django的View(视图)和路由系统

    一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...

  6. luogu P1744 采购特价商品

    实话说我本来想找SPFA的题,结果我硬生生的把这道题做成了Floyd 先来看题,我们会发现如果把他所给的变量都输入,那么会发现用Floyd的解法,输入占了main函数的一半长度... 题目分为两步走: ...

  7. 第六十八天 js轮播图

    1.浮动与定位结合使用 浮动与相对定位 //1.两者均参与布局 //2.主浮动布局,相对布局辅助完成布局微调 //3.相对定位布局微调不同于盒模型布局微调,相对定位布局不影响盒子原有位置,就会影响兄弟 ...

  8. 洛谷P1233 木棍加工题解 LIS

    突然发现自己把原来学的LIS都忘完了,正好碰见这一道题.|-_-| \(LIS\),也就是最长上升子序列,也就是序列中元素严格单调递增,这个东西有\(n^{2}\)和\(nlog_{2}n\)两种算法 ...

  9. 搭建vsf

    参考: 1.https://blog.csdn.net/liuzhenwen/article/details/7026263 我是全部替换了/lib/为/lib64/ 2.https://blog.c ...

  10. django系列 2 :启动应用,目录结构解读

    来源:https://docs.djangoproject.com/en/2.1/intro/tutorial01/ 该教程是创建一个用于投票的网页. 1.使用命令创建site 进入要创建site的目 ...