蜀国丞相 发表于 2024-1-29 18:01:50

6.Trigger触发器

触发器是指当满足预设的条件时去执行一些事务的工具,比如我们希望鼠标移到某个按钮上方时,这个按钮的颜色、大小发生一些改变。这个时候,条件是鼠标移到按钮上,执行的事务是改变按钮的颜色和大小。
WPF提供了5种触发器,以满足不同场合下的使用要求。触发器主要运用的场景在Style、ControlTemplate、DataTemplate三个地方。
触发器名称说明Trigger监测依赖属性的变化、触发器生效MultiTrigger通过多个条件的设置、达到满足条件、触发器生效DataTrigger通过数据的变化、触发器生效MultiDataTrigger多个数据条件的触发器EventTrigger事件触发器, 触发了某类事件时, 触发器生效。 
Trigger示例
在按钮的样式中,我们定义了一个触发器,条件是当按钮的IsMouseOver属性等于True时,执行的事务是将按钮的前景色改成红色,同时改变按钮的尺寸。
Trigger触发器的条件应该是当前控件拥有的属性名称
 
MultiTrigger示例
<CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       在上面的例子中,我们通过Style样式设置了CheckBox的Content及其它属性。然后在样式中实例化了一个MultiTrigger多条件触发器,并为其Conditions集合增加了两个条件,分别是IsMouseOver等于True和IsChecked等于True,当条件满足时,会改变CheckBox的前景色为红色,同时,Content变成"多条件触发器"
 
DataTrigger数据触发器
DataTrigger数据触发器,它会在绑定数据满足指定条件时应用属性值或执行操作
DataTrigger拥有一个Binding属性,表明它可以绑定某个控件的属性,或者是某个ViewModel的属性,Value属性则是表示绑定的属性达到某个值时,触发条件成立,然后去执行Setters集合里面的内容。
<CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>          
MultiDataTrigger触发器
当学会了DataTrigger数据触发器和MultiTrigger多条件触发器,MultiDataTrigger就比较好理解了,它就是前面两个触发器的结合体
MultiDataTrigger的用法:
<CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>          
EventTrigger触发器
EventTrigger,表示某个事件发生时,执行某一组操作,而这一组操作,通常是对当前控件或其它控件的属性做一些改变
<CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</CheckBox>       <CheckBox x:Name="checkbox">
    <CheckBox.Style>
      
    </CheckBox.Style>
</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】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 6.Trigger触发器