2008-08-21 163 views
42

我有这样的事情:如何在C#/ WPF中停止动画?

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

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

回答

69

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

+6

要小心。如果您指定HandoffBehavior.Compose,这不起作用。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms590757%28v=VS.90%29.aspx。注意动画参数的doco。 – LukeN 2011-06-23 01:03:14

+0

第二次调用`BeginAnimation`似乎并没有阻止第一个动画的动画“时钟”继续。在指定的时间之后,动画引发“Completed”事件。当调用`BeginAnimation`时不直接引发,而是当Animation *完成时*。 – BatteryBackupUnit 2015-06-08 12:49:02

4

将动画放置在StoryBoard中。在故事板上调用Begin()和Stop()开始停止动画。

28

当使用故事板来控制动画,请确保您以设置为控制动画的第二个参数设置为true:

public void Begin(
    FrameworkContentElement containingObject, 
    **bool isControllable** 
) 
+4

加上一个给你,我想知道为什么我的动画没有回应“停止”! – Joon 2010-06-03 19:07:48

+2

是的,是的,是的,这是做到了。那个错过的“真实”让我疯狂:) – 2011-08-16 09:28:23

+1

你是一个传奇!这让我疯狂! – 2011-09-14 03:36:09

7

如果你想基准值成为 有效价值再一次,您必须 停止动画从影响 财产。有三种方法来 与分镜动画做到这一点:

  • 设置动画的FillBehavior 物业停止
  • 从 个人属性中删除整个故事板
  • 删除动画

来自MSDN

How to: Set a Property After Animating It with a Storyboard

7

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

我已经把一个按钮,这个代码背后停止动画:

MyBeginStoryboard.Storyboard.Begin(this, true); 
MyBeginStoryboard.Storyboard.Stop(this); 

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

14

有两种方法可以停止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); 
0

您可以使用此代码:

[StoryBoardName].Remove([StoryBoardOwnerControl]); 
4
<Trigger.EnterActions> 
     <BeginStoryboard x:Name="myStory"> 
     ......... 
     </BeginStoryboard> 
</Trigger.EnterActions> 
<Trigger.ExitActions> 
     <StopStoryboard BeginStoryboardName="myStory"/> 
</Trigger.ExitActions>