【问题标题】:Stop animation outside of scope停止范围外的动画
【发布时间】:2015-08-05 16:34:02
【问题描述】:

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

但是,有一个问题:

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

System.Windows.Media.Animation 警告: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" ...

有没有一种简单的方法,最好没有代码后面(好吧,在最坏的情况下,附加属性可能是一种选择)来实现这一目标?我感觉这很简单……

【问题讨论】:

    标签: c# wpf animation storyboard


    【解决方案1】:

    我找到了答案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      相关资源
      最近更新 更多