• [WPF 学习] 10.触发器


    一、属性触发器
    要改变的属性值不能再控件里面设置初始值,否则不能触发,如下例的Width

         <Rectangle Height="100"  Fill="Black"  Name="R1" RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform></RotateTransform>
                </Rectangle.RenderTransform>
                <Rectangle.Style>
                    <Style TargetType="Rectangle">
                        <Setter Property="Width" Value="100"></Setter>
                        <Style.Triggers>
                            <Trigger Property="Fill" Value="Black">
                                <Trigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard RepeatBehavior="Forever" >
                                            <DoubleAnimation Storyboard.TargetProperty="Height" From="100" To="200" Duration="0:0:1"></DoubleAnimation>
                                            <DoubleAnimation Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" From="0" To="360" Duration="0:0:1"></DoubleAnimation>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </Trigger.EnterActions>
                                <Setter Property="Width" Value="200"></Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Rectangle.Style>
            </Rectangle>
    

    二、数据触发器
    相比对属性触发器而言,他可以绑定其他控件的属性或者ViewModel里面的属性

            <Rectangle  Width="200" Name="R2" Fill="Green" RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform >
                    <RotateTransform x:Name="R2RT" Angle="0"></RotateTransform>
                </Rectangle.RenderTransform>
                <Rectangle.Style>
                    <Style TargetType="Rectangle">
                        <Setter Property="Height" Value="100"></Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=R1,Path=Fill}" Value="Black">
                                <Setter Property="Height" Value="200"></Setter>
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard RepeatBehavior="Forever" >
                                            <DoubleAnimation Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" From="0" To="360" Duration="0:0:1"></DoubleAnimation>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Rectangle.Style>
    
            </Rectangle>
    
    

    三、事件触发器

    1. 只能触发故事板(不知道是否正确)
    2. 分为控件触发器和样式触发器(这两个名字自己取的,也不知道有没有官方说法)
      控件触发器( Storyboard.TargetName似乎专为它服务)
         <Rectangle Width="200" Height="200" Name="R3" RenderTransformOrigin="0.5,0.5" Fill="Yellow">
                <Rectangle.RenderTransform>
                    <RotateTransform x:Name="R3RT"></RotateTransform>
                </Rectangle.RenderTransform>
                
                <Rectangle.Triggers>
                    <EventTrigger RoutedEvent="Mouse.MouseEnter">
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetName="R2RT" Storyboard.TargetProperty="Angle" From="0" To="360" RepeatBehavior="Forever" Duration="0:0:1"></DoubleAnimation>
                                <DoubleAnimation Storyboard.TargetName="R3RT" Storyboard.TargetProperty="Angle" From="0" To="360" RepeatBehavior="Forever" Duration="0:0:1"></DoubleAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Rectangle.Triggers>
            </Rectangle>
    

    样式触发器

            <Rectangle Width="200" Height="200" Name="R4" RenderTransformOrigin="0.5,0.5" Fill="Yellow">
                <Rectangle.RenderTransform>
                    <RotateTransform x:Name="R4RT"></RotateTransform>
                </Rectangle.RenderTransform>
                <Rectangle.Style>
                    <Style TargetType="Rectangle">
                        <Style.Triggers>
                            <EventTrigger RoutedEvent="Mouse.MouseEnter">
                                <EventTrigger.Actions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" From="0" To="360" RepeatBehavior="Forever" Duration="0:0:1"></DoubleAnimation>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger.Actions>
                            </EventTrigger>
                        </Style.Triggers>
                    </Style>
                </Rectangle.Style>
            </Rectangle>
    
    
  • 相关阅读:
    Netty学习路线总结
    Intellij IDEA 快捷键整理-鬼畜版(全键盘开发指南)
    httpClient
    [翻译]Javaslang 介绍
    Docker学习<一>--初体验Windows环境下安装
    Spring @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
    IntelliJ IDEA 2016.2激活方法
    解决mac升级后,出现的 xcrun: error: invalid active developer path, missing xcrun 错误
    Logstash 安装与配置
    【JVM学习笔记】双亲委托机制存在的意义
  • 原文地址:https://www.cnblogs.com/catzhou/p/12618616.html
Copyright © 2020-2023  润新知