none
删除控件时是否需要显式停止其动画 RRS feed

  • 问题

  • 如题,假设一个Image控件,通过 StoryBoard 实现一个透明度闪烁的动画,并且动画是无限循环的。

    那么当我不在需要这个Image控件,对其执行 Grid.Chridren.Remove(Image1)。

    是否需要在这之前先显式用代码停止这个StoryBoard呢?

    2013年4月22日 1:30

答案

  • Hello, PM_NUAA。不需要停止这个情节提要(Storyboard),因为即使从Grid的Children中删除这个控件,这个控件本身(至少是这个控件的引用)还存在,而WPF中的动画全都是一种“将时间映射为特定的依赖属性的值”的东西,所以这不会造成异常(例如NullReferenceException)。

    但是还是建议删除控件的时候停止动画,因为即使控件已经被删除,动画仍然会继续,如果大量的无用动画进行,可能会影响到性能。

    证明方法:如果不停止动画,则删除控件之后再加回来,你会看到动画仍然在播放。

    • 已标记为答案 PM_NUAA 2013年4月23日 9:50
    2013年4月22日 12:02
  • 使用BeginStoryboard开始的动画可以通过StopStoryboard停止。
    • 已标记为答案 PM_NUAA 2013年4月23日 16:03
    2013年4月23日 12:10

全部回复

  • Hello, PM_NUAA。不需要停止这个情节提要(Storyboard),因为即使从Grid的Children中删除这个控件,这个控件本身(至少是这个控件的引用)还存在,而WPF中的动画全都是一种“将时间映射为特定的依赖属性的值”的东西,所以这不会造成异常(例如NullReferenceException)。

    但是还是建议删除控件的时候停止动画,因为即使控件已经被删除,动画仍然会继续,如果大量的无用动画进行,可能会影响到性能。

    证明方法:如果不停止动画,则删除控件之后再加回来,你会看到动画仍然在播放。

    • 已标记为答案 PM_NUAA 2013年4月23日 9:50
    2013年4月22日 12:02
  • 谢谢。 如果想要停止动画,是不是必须执行

    sbStartHint = (Storyboard)this.FindResource("sbStartHint");
    sbOnLoaded.Begin(this, true);

    这样启动的动画才能被Stop啊?

    2013年4月23日 9:52
  • 使用BeginStoryboard开始的动画可以通过StopStoryboard停止。
    • 已标记为答案 PM_NUAA 2013年4月23日 16:03
    2013年4月23日 12:10