代码之家  ›  专栏  ›  技术社区  ›  Mark A. Donohoe

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

  •  1
  • Mark A. Donohoe  · 技术社区  · 6 年前

    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);
    

    比如说在动画进行到一半的时候——在2秒的时候——我需要取消当前的动画,用新的动画开始一个新的动画 To 位置 From 位置会在现在的任何地方)这是第一个动画的位置

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

    我的想法是:

    1. 得到它是 价值
    2. 值加100

    我被困的是得到1。

    ……还是我做错了?

    0 回复  |  直到 6 年前