前言:对于此操作,我只想说是微软的神经,还是我的笨蛋。为什么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.此方法,个人感觉不好,不知道小伙伴们有木有好的方法,有的话记得@我。