即使控件与其父控件分离,动画也会继续运行

时间:2013-05-04 23:48:36

标签: wpf animation parent

这是预期的行为吗?如果我在屏幕上有一个标签动画,我用canvas1.Children.Remove(label)删除它,似乎动画继续在幕后运行甚至触发AnimationCompleted,即使我没有引用标签或DoubleAnimation我以前用它制作动画。如果动画无穷无尽怎么办?

我是否真的需要自己做簿记并在从父母那里删除控件时自行停止动画?

1 个答案:

答案 0 :(得分:2)

  

我真的需要自己做记账吗

是的,您只能Animate Dependency个属性和Dependency属性static,所以即使Control不再被引用Animation将继续。

根据您Animation的目的,您可能会像设置动画FillBehaviorStop一样简单

animation.FillBehavior = FillBehavior.Stop;

这将在动画完成时停止动画TimeLine,但如果你有重复的动画或动画设置某些值,动画停止动画属性将返回其原始值,这并不总是一个很好的解决方案立即


如果FillBehavior.Stop在您的情况下不起作用,请以其他方式停止AnimationsStoryboards

如果AnimationStoryboard,您可以致电StopStoryboard

当您使用BeginStoryboard时,您可以提供Name,然后可以在StopStoryboard中使用

  <BeginStoryboard Name="myStoryboard" ......... />

  <StopStoryboard BeginStoryboardName="myStoryboard" />

触发故事板示例:

<Trigger>
   <Trigger.EnterActions>
        <BeginStoryboard Name="myStoryboard">
          <Storyboard ..... />
       </BeginStoryboard>
   </Trigger.EnterActions>
   <Trigger.ExitActions>
      <StopStoryboard BeginStoryboardName="myStoryboard" />
   </Trigger.ExitActions>
</Trigger>

或者在幕后代码中,您只需在故事板上调用Stop

myStoryboard.Stop();

如果您在代码中创建一个简单的动画,则可以通过将null TimeLine应用于您设置为动画的DependencyProperty来停止它。

示例:

// Start
myLabel.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation(10.0, 100.0, new Duration(TimeSpan.FromSeconds(5)));

// Stop
myLabel.BeginAnimation(Canvas.LeftProperty, null);