1

DoubleAnimation假设我在一个控件的属性上开始了四秒钟,该Canvas.Left控件将值从其当前值设置为 100,并且该动画是通过BeginAnimation在代码隐藏中调用该控件来启动的。

void Animate(Control someControlOnCanvas, int newX){

    var canvasLeftAnimation = new DoubleAnimation();
    canvasLeftAnimation.To = newX;
    canvasLeftAnimation.FillBehavior = FillBehavior.Stop;
    canvasLeftAnimation.Duration = new Duration(TimeSpan.FromSeconds(4));
    canvasLeftAnimation.Completed += (s, e) => {
        Canvas.SetLeft(targetButton, x);
    };

    someControlOnCanvas.BeginAnimation(Canvas.LeftProperty, canvasLeftAnimation);
}

Animate(somethingToMove, 100);

说动画的一半——在两秒的标记处——我需要取消当前动画并开始一个新的动画,新的To位置(该From位置将是现在的任何位置)在第一个位置的 100 处动画结束(即不是它当前在 50 的位置,而是它应该在的位置,即 100,因此再添加 100 将产生 200 的新目标。)

如果我尝试获取当前的 Left 值,它的动画值是 50。如果我尝试获取基值,它是动画开始的地方,它是零,因为在完成处理程序触发之前它没有正式更新。

所以除了手动添加一个变量来跟踪事情应该在哪里之外,我怎样才能开始一个新的动画,上面写着“转到原来的结尾,加上 100?”

我的想法是:

  1. 获取现有/当前动画
  2. 获得它的To价值
  3. 使用前一个动画的To值加上 100开始一个新动画

我坚持的是获得#1。

......或者我是不是把这一切都搞错了?

4

0 回答 0