2008-08-21 93 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>