停止范围之外的动画

时间:2015-08-04 14:57:09

标签: c# wpf animation storyboard

我有一个复杂的动画,它会对视图进行一些重大更改(更改某些控件的可见性,不透明度,背景画笔等),我想还原这个动画做了什么。停止/删除故事板“应该”这样做。

然而,有一个问题:

动画在单击一个按钮时运行,但在单击另一个按钮时停止。通过这种方法,我收到以下错误。

  

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" ...

有没有一种简单的方法,最好没有代码(在最坏的情况下附加属性可能是一个选项)来实现这一点?我觉得这很简单...

1 个答案:

答案 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>