如何在运行时改变' 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
属性(RepeatBehavior
或AutoReverse
等)后BeginAnimation
发生以下错误:
AnimClock.Timeline.AutoReverse = true;
不能在对象"System.Windows.Media.Animation"上设置属性。因为它处于只读状态
"虽然大多数时间轴属性都是可动画化的,并且可以进行数据绑定,但更改活动时间轴的属性值似乎没有效果。这是因为,当一个Timeline开始时,计时系统会生成一个Timeline的副本,并使用它来创建一个Clock对象。修改原文件对系统的副本没有影响。
对于反映更改的时间轴,必须重新生成其时钟并用于替换先前创建的时钟。时钟不会自动重新生成。以下是应用时间轴更改的几种方法:
如果时间轴是或属于一个故事板,你可以通过使用BeginStoryboard或Begin方法重新应用它的故事板来反映变化。这也有重新启动动画的副作用。在代码中,您可以使用Seek方法将故事板推进到之前的位置。
如果你使用BeginAnimation方法将动画直接应用到属性中,请再次调用BeginAnimation方法并将修改后的动画传递给它。
如果您直接在时钟级别工作,请创建并应用一组新的时钟,并使用它们来替换先前生成的时钟集。"
我在这一页找到了答案