zoukankan      html  css  js  c++  java
  • WPF之通过EventTrigger修改模板中元素的属性

    前言:对于此操作,我只想说是微软的神经,还是我的笨蛋。为什么EventTrigger就不能像Trigger那样直接设置Property以及Value就对属性进行操作,而必须要放一个Action,而默认的Action只有三个,其中两个为动画,一个为播放声音,我只想说,可以洗洗睡了。

    正题:在EventTriigger中修改属性的值,怎么做呢,我们都知道EventTrigger中只有Action可以使用,而Action的操作中我们也只能使用StoryBoard来操作,难道我们也要通过动画修改各种属性?没错,就是这样,殊不知动画不仅支持Double、Color、Point,它还支持Object哦,待我上例子。

     <ControlTemplate.Triggers>
                <EventTrigger RoutedEvent="MouseDoubleClick">
                    <BeginStoryboard>
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="DocumentPageView_2" Storyboard.TargetProperty="(UIElement.Visibility)">
                                <DiscreteObjectKeyFrame KeyTime="00:00:0.1" Value="{x:Static Visibility.Collapsed}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="AdornerDecorator1" Storyboard.TargetProperty="(UIElement.Visibility)">
                                <DiscreteObjectKeyFrame KeyTime="00:00:0.1" Value="{x:Static Visibility.Visible}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
                <EventTrigger RoutedEvent="MouseLeftButtonDown">
                    <BeginStoryboard>
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="AdornerDecorator1" Storyboard.TargetProperty="(UIElement.Visibility)">
                                <DiscreteObjectKeyFrame KeyTime="00:00:0.1" Value="{x:Static Visibility.Collapsed}" />
                            </ObjectAnimationUsingKeyFrames>
                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="DocumentPageView_2" Storyboard.TargetProperty="(UIElement.Visibility)">
                                <DiscreteObjectKeyFrame KeyTime="00:00:0.1" Value="{x:Static Visibility.Visible}" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

    在上述代码中分别在鼠标单击事件和双击事件中隐藏/显示了元素,是不是很奇怪我们使用的ObjectAnimationUsingKeyFrames这个东西,他和DoubleAnimationusingKeyFrames等三个动画是一样的,只不过它处理的是除上述三种动画支持的类型之外的类型。比如现在设置的为Visibility属性,并非Double、Color、Point,那么我们就可以使用这个东东,使用方法一样,只不过Value地方要特殊处理哦。

    P.S.此方法,个人感觉不好,不知道小伙伴们有木有好的方法,有的话记得@我。

  • 相关阅读:
    Angular——事件指令
    Angular——数据绑定
    Angular——自定义指令
    Angular——表单指令
    Angular——引入模板指令
    Angular——内置指令
    Angular——基本使用
    Canvas——基本入门
    JS高级——面向对象方式解决tab栏切换问题
    JS高级——面向对象方式解决歌曲管理问题
  • 原文地址:https://www.cnblogs.com/ListenFly/p/3465492.html
Copyright © 2011-2022 走看看