【发布时间】:2016-05-23 08:42:55
【问题描述】:
我想重复几次我的动画,每次目标的属性都会随着它被触发或动画完成而改变。
但动画只在第一次工作。
为了简化这一点,我只是让一个矩形在画布中从 0 移动到 400 10 次。代码如下。
我搜索过类似“wpf 重复动画”这样的问题,建议使用seek() 方法或rect.BeginAnimation(property, null),但对我不起作用。
private void init()
{
Rectangle rect = new Rectangle();
this.RegisterName("rect", rect);
rect.Height = 100;
rect.Width = 50;
rect.Fill = Brushes.LightBlue;
Canvas.SetTop(rect, 0);
Canvas.SetLeft(rect, 0);
myCanvas.Children.Add(rect);
TargetAnimation(0);
}
private void TargetAnimation(int i)
{
DoubleAnimation da = new DoubleAnimation();
da.From = 0;
da.To = 400;
da.Duration = TimeSpan.FromSeconds(5);
Storyboard.SetTargetName(da, "rect");
Storyboard.SetTargetProperty(da, new PropertyPath(Canvas.LeftProperty));
Storyboard storyboard = new Storyboard();
storyboard.Children.Add(da);
storyboard.Completed += Storyboard_Completed;
storyboard.Begin(this);
}
private void Storyboard_Completed(object sender, EventArgs e)
{
if (i < 10)
TargetAnimation(++i);
else
return;
}
【问题讨论】:
-
你为什么将参数
i传递给你的TargetAnimation方法?你没有使用它... -
为什么不使用
da.RepeatBehavior = RepeatBehavior.Forever;? -
很抱歉没有说清楚。
i是一个全局参数。 @Pikoh -
我只是简化了问题。实际上,我每次都需要更改目标的属性,例如移动距离或持续时间。 @JeroenvanLangen