Я хотел бы повторить мою анимацию несколько раз, каждый раз, когда свойство цели изменилось с завершением или завершением анимации.что не так с моим кодом анимации wpf
Но анимация работает только в первый раз.
Чтобы упростить это, я просто позволю прямоугольнику перемещаться от 0 до 400 на холсте в 10 раз. Выполняется код.
Я искал такие вопросы, как 'wpf repeat animation', который предложил использовать метод 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'? вы не используете его ... – Pikoh
Почему бы не использовать 'da.RepeatBehavior = RepeatBehavior.Forever;'? –
Прошу прощения за то, что вы не поняли. 'i' является глобальным аргументом. @Pikoh – HDQ