Я затрудняюсь объяснить это поведение.Без Dispatcher.BeginInvoke
вы бы просто получили все элементы одновременно.Однако я не понимаю, почему вы не получите то же самое при использовании BeginInvoke
.Тем не менее ни то, что вы после.Вам нужно чередовать анимации одну за другой.
Вероятно, лучший способ сделать это - использовать одну StoryBoard с несколькими анимациями, секвенирование анимаций после всей точки Раскадровка .
private DoubleAnimation CreateAnimation(double from, double to, DependencyObject targetControl, int index)
{
DoubleAnimation animation = new DoubleAnimation();
animation.From = from;
animation.To = to;
animation.Duration = TimeSpan.FromSeconds(1);
animation.BeginTime = TimeSpan.FromSeconds(1 * index);
animation.AutoReverse = false;
Storyboard.SetTarget(animation, targetControl);
Storyboard.SetTargetProperty(animation, new PropertyPath(UIElement.OpacityProperty));
return animation;
}
Обратите внимание на дополнительный параметр index
, который используется для указания времени начала анимации.
Теперь ваш код выглядит просто:1015 *
var sb = new Storyboard();
for (int i = 0; i < 4; i++)
{
sb.Children.Add(CreateAnimation(1.0, 0.0, this.Lights[0, i], i);
}
sb.Begin();