您可以在动画完成之前从动画中获得最终值吗?

时间:2018-08-01 21:28:53

标签: c# wpf doubleanimation

假设我在控件的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。

...还是我要解决所有这些错误?

0 个答案:

没有答案