簡體   English   中英

如何在 C#/WPF 中停止動畫?

[英]How to stop an animation in C# / WPF?

我有這樣的事情:

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

現在,您將如何停止該動畫( DoubleAnimation )? 我想這樣做的原因是因為我想開始新的動畫(這似乎有效,但很難說)並最終停止最后一個動畫......

要停止它,請再次調用BeginAnimation並將第二個參數設置為null

使用故事板控制動畫時,請確保將第二個參數設置為 true 以將動畫設置為可控:

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

有兩種方法可以停止一個 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);
<Trigger.EnterActions>
       <BeginStoryboard x:Name="myStory">
       .........
       </BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
       <StopStoryboard BeginStoryboardName="myStory"/>
</Trigger.ExitActions>

在我的例子中,我不得不使用兩個命令,我的 xaml 有一個觸發觸發器的按鈕,它的觸發器觸發故事板動畫。

我在后面放了一個按鈕來停止動畫:

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

我不喜歡它,但它在這里確實有效。 試一試!

如果想讓基值再次成為有效值,必須停止動畫對屬性的影響。 使用故事板動畫可以通過三種方式來做到這一點:

  • 將動畫的 FillBehavior 屬性設置為 Stop
  • 刪除整個故事板
  • 從單個屬性中刪除動畫

來自 MSDN

如何:在使用故事板動畫后設置屬性

將動畫放置在 StoryBoard 中。 在情節提要上調用 Begin() 和 Stop() 以開始停止動畫。

您可以使用此代碼:

[StoryBoardName].Remove([StoryBoardOwnerControl]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM