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.此方法,个人感觉不好,不知道小伙伴们有木有好的方法,有的话记得@我。

posted @ 2013-12-09 15:26  wangyafei_it  阅读(2543)  评论(0编辑  收藏  举报