如何在C#/ WPF中停止动画?

Dar*_*mas 47 c# wpf

我有这样的事情:

barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation(
    barProgress.Value, dNextProgressValue,
    new Duration(TimeSpan.FromSeconds(dDuration)));

现在,你将如何停止那个动画DoubleAnimation?我想这样做的原因是因为我想开始新的动画(这似乎有用,但很难说)并最终停止上一个动画......

The*_*urf 77

要停止它,请BeginAnimation再次调用第二个参数设置为null.

  • 小心.如果指定HandoffBehavior.Compose,则不起作用.有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms590757%28v=VS.90%29.aspx.注意动画参数的doco. (6认同)
  • 第二次调用BeginAnimation似乎并没有阻止第一个动画的Animation“ clock”继续进行。在指定的时间之后,动画将引发“已完成”事件。调用BeginAnimation时,不是直接引发Is,而是当Animation *将要完成*时才引发。 (3认同)

use*_*837 29

使用故事板控制动画时,请确保将第二个参数设置为true,以便将动画设置为可控制:

public void Begin(
    FrameworkContentElement containingObject,
    **bool isControllable**
)
Run Code Online (Sandbox Code Playgroud)

  • 加上一个给你,我想知道为什么我的动画没有回应"停止"! (4认同)
  • 是的,是的,是的,这样做了.缺少"真实"让我疯了:) (2认同)

Bru*_*eLH 16

有两种方法可以停止BeginAnimation.第一个是再次调用BeginAnimation,第二个参数设置为null.这将消除对财产的所有动画和还原值回其基本价值.

根据您使用该值的方式,这可能不是您想要的行为.第二种方法是将动画BeginTime设置为null,然后用它调用BeginAnimation.这将删除该特定动画并将值保留在其当前位置.

DoubleAnimation myAnimation = new Animation();
// Initialize animation
...

// To start
element.BeginAnimation(Property, myAnimation);

// To stop and keep the current value of the animated property
myAnimation.BeginTime = null;
element.BeginAnimation(Property, myAnimation);
Run Code Online (Sandbox Code Playgroud)


Nic*_*ick 7

如果希望基值再次成为有效值,则必须停止动画影响属性.故事板动画有三种方法可以做到这一点:

  • 将动画的FillBehavior属性设置为Stop
  • 删除整个故事板
  • 从单个属性中删除动画

来自MSDN

如何:使用故事板为其设置动画后设置属性


Jun*_*r M 7

在我的情况下,我不得不使用两个命令,我的xaml有一个触发触发器的按钮,它的触发器触发故事板动画.

我用一个按钮停止动画,后面跟着这个代码:

MyBeginStoryboard.Storyboard.Begin(this, true);
MyBeginStoryboard.Storyboard.Stop(this);
Run Code Online (Sandbox Code Playgroud)

我不喜欢它,但它确实在这里工作.试试看!

  • 记得调用Storyboard.Remove(this),否则你可能会泄漏内存,因为你的FrameworkElement会保留对storyboard的引用.我刚刚在我的代码中找到了一个实例,只需停止并替换动画,就会在运行几周后生成4000多个动画. (3认同)

Faw*_*waz 6

<Trigger.EnterActions>
       <BeginStoryboard x:Name="myStory">
       .........
       </BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
       <StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>
Run Code Online (Sandbox Code Playgroud)

  • Windows Presentation Foundation(WPF)项目不支持StopStoryBoard (2认同)
  • @SimonSmith `StopStoryBoard` 在 WPF 中受支持! (2认同)