在作用域之外停止动画
本文关键字:动画 作用域 | 更新日期: 2023-09-27 18:06:13
我有一个复杂的动画,它对视图做了一些重大的改变(改变一些控件的可见性,不透明度,背景画笔等),我想还原这个动画做了什么。Stop/Remove storyboard"应该"这样做。
然而,有一个问题:
动画在单击一个按钮时运行,但在单击另一个按钮时停止。使用这种方法,我得到以下错误:
System.Windows.Media。动画警告:6:无法执行操作,因为指定的故事板从未应用于此对象进行交互控制。Action = "删除 ' ......
我是这样做的:
<!-- button which start animation -->
<Button ...>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard x:Name="storyboardUserClick">
<Storyboard>
<ObjectAnimationUsingKeyFrames ...
<!-- button which should revert what animation did --->
<Button ...>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<RemoveStoryboard BeginStoryboardName="storyboardUserClick" ...
是否有一个简单的方法,最好没有后面的代码(好吧,附加属性可能是一个选项在最坏的情况下)来实现?
我在这里找到了答案。
这个想法是将动画(我说的动画,但我的意思是Storyboard
,甚至更具体地说BeginStoryboard
)移动到RemoveStoryboard
可访问的范围。就像
<Grid>
<Button x:Name="buttonStart" ...>
<Button x:Name="buttonStop" ...>
<Grid.Triggers>
<EventTrigger SourceName="buttonStart" RoutedEvent="Button.Click">
<BeginStoryboard x:Name="storyboardUserClick">
<Storyboard>
<ObjectAnimationUsingKeyFrames ...
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger SourceName="buttonStop" RoutedEvent="Button.Click">
<RemoveStoryboard BeginStoryboardName="storyboardUserClick" />
</EventTrigger>
</Grid.Triggers>
</Grid>