如何在运行时改变' AnimationClock-timeline '属性

本文关键字:AnimationClock-timeline 属性 改变 运行时 | 更新日期: 2023-09-27 18:05:13

我这样使用AnimationClock:

   DoubleAnimation ScrollAnimation = new DoubleAnimation();
   ....
     AnimationClock AnimClock = new AnimationClock();
     AnimClock = ScrollAnimation.CreateClock();
     TranslateTransform oTransform = (TranslateTransform)transGroup.Children[1];
     oTransform.ApplyAnimationClock(prop, AnimClock);
     AnimClock.Controller.SpeedRatio = ScrollSlider.Value; 
     AnimClock.Completed += ScrollClockController_Completed;
     oTransform.BeginAnimation(TranslateTransform.XProperty, ScrollAnimation);

我的代码工作得很好,但是当我试图改变AnimationClock-timeline属性(RepeatBehaviorAutoReverse等)后BeginAnimation发生以下错误:

AnimClock.Timeline.AutoReverse = true;

不能在对象"System.Windows.Media.Animation"上设置属性。因为它处于只读状态

如何在运行时改变' AnimationClock-timeline '属性

"虽然大多数时间轴属性都是可动画化的,并且可以进行数据绑定,但更改活动时间轴的属性值似乎没有效果。这是因为,当一个Timeline开始时,计时系统会生成一个Timeline的副本,并使用它来创建一个Clock对象。修改原文件对系统的副本没有影响。

对于反映更改的时间轴,必须重新生成其时钟并用于替换先前创建的时钟。时钟不会自动重新生成。以下是应用时间轴更改的几种方法:

如果时间轴是或属于一个故事板,你可以通过使用BeginStoryboard或Begin方法重新应用它的故事板来反映变化。这也有重新启动动画的副作用。在代码中,您可以使用Seek方法将故事板推进到之前的位置。

如果你使用BeginAnimation方法将动画直接应用到属性中,请再次调用BeginAnimation方法并将修改后的动画传递给它。

如果您直接在时钟级别工作,请创建并应用一组新的时钟,并使用它们来替换先前生成的时钟集。"

我在这一页找到了答案