假设我在控件的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?”
我的想法是:
To
值To
值加上100来开始一个新动画我坚持的是获得#1。
...还是我要解决所有这些错误?