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。
......或者我是不是把这一切都搞错了?