在没有新的Begin()的故事板/ ParallelTimelines中部分更新WPF动画?

时间:2009-08-19 11:32:09

标签: c# .net wpf animation

我正在开发一个WPF应用程序,它显示了许多与MediaElement中显示的视频同步动画的图形元素(RectangleGeometries和Splines)。

同步树的构造如下:

  • 故事板(用于控件:Begin(),Pause(),Seek()...)
    • MediaTimeline (使用Storyboard.SetTargetName()连接到MediaElement)
    • ParallelTimeline 0(细分为ParallelTimelines以简化对象管理)
      • KeyframeAnimation 0(动画一些图形元素)
      • KeyframeAnimation 1(动画其他图形元素)
      • ...
    • ...(可能更多ParallelTimelines ...)

由于要显示和动画的元素的动态特性,所有这些都是在代码中构造和管理的,即没有XAML。设置和播放,寻找等等,完美无缺。

然而,我面临的问题如下:

可以不时地更新动画元素(例如,动画关键帧被更新,添加,移除......),同时仍然显示视频,尽管可能处于暂停状态。简单地更新原始动画没有任何效果,因为在故事板播放期间显然使用了所有动画的冻结副本(Freezable)(查看源代码,当分配时钟并且动画应用于动画时,这种冻结似乎发生在Begin()方法中。依赖属性)。我试过让我的动画不可解析(CanFreeze == false),但这只会导致异常而不播放任何内容。

有没有办法只更新一些动画(例如,只有 ParallelTimeline 0和子),而不强制重置整个故事板,也不会破坏与原始MediaTimeline的同步或强制MediaTimeline重新加载(这涉及重新加载和重新搜索相关媒体并造成重大延迟)?

0 个答案:

没有答案