我有一个复杂的动画,它会对视图进行一些重大更改(更改某些控件的可见性,不透明度,背景画笔等),我想还原这个动画做了什么。停止/删除故事板“应该”这样做。
然而,有一个问题:
动画在单击一个按钮时运行,但在单击另一个按钮时停止。通过这种方法,我收到以下错误。
System.Windows.Media.Animation警告:6:无法执行操作,因为指定的Storyboard从未应用于此对象以进行交互式控制。行动='删除'......
以下是我的表现:
<!-- 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" ...
有没有一种简单的方法,最好没有代码(在最坏的情况下附加属性可能是一个选项)来实现这一点?我觉得这很简单...
答案 0 :(得分:0)
我找到了答案here。
我们的想法是将动画(我说动画,但我的意思是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>