如何在运行时更改`AnimationClock-timeline`属性?

时间:2015-07-29 09:40:53

标签: c# wpf animation

我这样使用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属性(AutoReverseBeginAnimation等)时,会发生以下错误:

AnimClock.Timeline.AutoReverse = true;
  

无法在对象' System.Windows.Media.Animation.DoubleAnimation'上设置属性。因为它处于只读状态

1 个答案:

答案 0 :(得分:0)

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

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

如果时间轴属于或属于故事板,则可以通过使用BeginStoryboard或Begin方法重新应用其故事板来使其反映更改。这具有重新启动动画的副作用。在代码中,您可以使用Seek方法将故事板推进到之前的位置。

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

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

我在this page

找到答案