繁体   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