翼度科技»论坛 编程开发 .net 查看内容

6.Trigger触发器

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
触发器是指当满足预设的条件时去执行一些事务的工具,比如我们希望鼠标移到某个按钮上方时,这个按钮的颜色、大小发生一些改变。这个时候,条件是鼠标移到按钮上,执行的事务是改变按钮的颜色和大小。
WPF提供了5种触发器,以满足不同场合下的使用要求。触发器主要运用的场景在Style、ControlTemplate、DataTemplate三个地方。
触发器名称说明
Trigger监测依赖属性的变化、触发器生效
MultiTrigger通过多个条件的设置、达到满足条件、触发器生效
DataTrigger通过数据的变化、触发器生效
MultiDataTrigger多个数据条件的触发器
EventTrigger事件触发器, 触发了某类事件时, 触发器生效。
 
Trigger示例
  1. [/code]在按钮的样式中,我们定义了一个触发器,条件是当按钮的IsMouseOver属性等于True时,执行的事务是将按钮的前景色改成红色,同时改变按钮的尺寸。
  2. Trigger触发器的条件应该是当前控件拥有的属性名称
  3.  
  4. [b]MultiTrigger示例[/b]
  5. [code]<CheckBox x:Name="checkbox">
  6.     <CheckBox.Style>
  7.         
  8.     </CheckBox.Style>
  9. </CheckBox>      
复制代码
在上面的例子中,我们通过Style样式设置了CheckBox的Content及其它属性。然后在样式中实例化了一个MultiTrigger多条件触发器,并为其Conditions集合增加了两个条件,分别是IsMouseOver等于True和IsChecked等于True,当条件满足时,会改变CheckBox的前景色为红色,同时,Content变成"多条件触发器"
 
DataTrigger数据触发器
DataTrigger数据触发器,它会在绑定数据满足指定条件时应用属性值或执行操作
DataTrigger拥有一个Binding属性,表明它可以绑定某个控件的属性,或者是某个ViewModel的属性,Value属性则是表示绑定的属性达到某个值时,触发条件成立,然后去执行Setters集合里面的内容。
  1. <CheckBox x:Name="checkbox">
  2.     <CheckBox.Style>
  3.         
  4.     </CheckBox.Style>
  5. </CheckBox>       <CheckBox x:Name="checkbox">
  6.     <CheckBox.Style>
  7.         
  8.     </CheckBox.Style>
  9. </CheckBox>         
复制代码
 
MultiDataTrigger触发器
当学会了DataTrigger数据触发器和MultiTrigger多条件触发器,MultiDataTrigger就比较好理解了,它就是前面两个触发器的结合体
MultiDataTrigger的用法:
  1. <CheckBox x:Name="checkbox">
  2.     <CheckBox.Style>
  3.         
  4.     </CheckBox.Style>
  5. </CheckBox>       <CheckBox x:Name="checkbox">
  6.     <CheckBox.Style>
  7.         
  8.     </CheckBox.Style>
  9. </CheckBox>         
复制代码
 
EventTrigger触发器
EventTrigger,表示某个事件发生时,执行某一组操作,而这一组操作,通常是对当前控件或其它控件的属性做一些改变
  1. <CheckBox x:Name="checkbox">
  2.     <CheckBox.Style>
  3.         
  4.     </CheckBox.Style>
  5. </CheckBox>       <CheckBox x:Name="checkbox">
  6.     <CheckBox.Style>
  7.         
  8.     </CheckBox.Style>
  9. </CheckBox>       <CheckBox x:Name="checkbox">
  10.     <CheckBox.Style>
  11.         
  12.     </CheckBox.Style>
  13. </CheckBox>       <CheckBox x:Name="checkbox">
  14.     <CheckBox.Style>
  15.         
  16.     </CheckBox.Style>
  17. </CheckBox>       <CheckBox x:Name="checkbox">
  18.     <CheckBox.Style>
  19.         
  20.     </CheckBox.Style>
  21. </CheckBox>       <CheckBox x:Name="checkbox">
  22.     <CheckBox.Style>
  23.         
  24.     </CheckBox.Style>
  25. </CheckBox>       <CheckBox x:Name="checkbox">
  26.     <CheckBox.Style>
  27.         
  28.     </CheckBox.Style>
  29. </CheckBox>       <CheckBox x:Name="checkbox">
  30.     <CheckBox.Style>
  31.         
  32.     </CheckBox.Style>
  33. </CheckBox>       <CheckBox x:Name="checkbox">
  34.     <CheckBox.Style>
  35.         
  36.     </CheckBox.Style>
  37. </CheckBox>       <CheckBox x:Name="checkbox">
  38.     <CheckBox.Style>
  39.         
  40.     </CheckBox.Style>
  41. </CheckBox>       <CheckBox x:Name="checkbox">
  42.     <CheckBox.Style>
  43.         
  44.     </CheckBox.Style>
  45. </CheckBox>       <CheckBox x:Name="checkbox">
  46.     <CheckBox.Style>
  47.         
  48.     </CheckBox.Style>
  49. </CheckBox>       <CheckBox x:Name="checkbox">
  50.     <CheckBox.Style>
  51.         
  52.     </CheckBox.Style>
  53. </CheckBox>       <CheckBox x:Name="checkbox">
  54.     <CheckBox.Style>
  55.         
  56.     </CheckBox.Style>
  57. </CheckBox>       <CheckBox x:Name="checkbox">
  58.     <CheckBox.Style>
  59.         
  60.     </CheckBox.Style>
  61. </CheckBox>           
复制代码
我们为CheckBox控件编写了一个样式,在样式的Triggers集合中,实例化了两个EventTrigger ,对应的事件分别是CheckBox控件MouseEnter和MouseLeave事件,在各自的触发器中又分别实例化了两个DoubleAnimation对象,当鼠标进入时,改变CheckBox的宽度和高度为60,当鼠标移出时,还原为50。
然后,我们来看看DoubleAnimationUsingKeyFrames动画演示。
首先我们在Window.Resources中定义了两个故事板,分别改变_LeftBorder控件的宽度,什么时候执行这两个故事板?这个时候,我们在Window.Triggers中实例化了两个EventTrigger,条件是当_CheckBox的Checked事件触发时,将_LeftBorder控件的宽度改为0,当_CheckBox的UnChecked事件触发器,将_LeftBorder控件的宽度改为188,由于是关键帧动画,所以,我们会看到左侧的菜单区域被缓缓关闭和打开。
 

来源:https://www.cnblogs.com/MingQiu/p/17994879
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具