Ситуация / проблема
Я пытаюсь создать маленькую игру, в которой мне нужно добавить X элементов управления на холст.
Когда количество элементов управления мало, все работает отлично. Элемент управления добавляется, и после этого срабатывает раскадровка, которая изменяет непрозрачность с 0 до 1 в течение 0,5 с. Однако, когда более чем 30/40 элементов управления «запаздывают», и первые 0,2 секунды раскадровки «пропускаются».
Существует элемент управления изображением с текстовым полем под ним.
Прежде чем элемент управления будет добавлен на холст, его сначала нужно создать.
Вопрос
Как я могу изменить свою программу, чтобы элементы управления были добавлены правильно и раскадровка воспроизводилась без задержки, сколько элементов управления мне нужно добавить?
Возможно, что-то с операцией ASync, которая создает элемент управления?
Любые идеи будут приветствоваться, но, если вы отправите идею, приведите небольшой пример.
MVVM Binding не является опцией.
Обновление
Способ получения нового элемента
var control = new ElementControl(item);
x = (x < 0) ? (GetWidth() * (i % GetCount())) : x;
y = (y < 0) ? (GetHeight() * (i / GetCount())) : y;
control.SetValue(Canvas.LeftProperty, x);
control.SetValue(Canvas.TopProperty, y);
control.SetValue(Canvas.ZIndexProperty, gbl.zIndex++);
control.Drag_Completed += Element_Dropped;
control.Drag_Started += Element_Dragging;
control.DoubleClick += DoubleClick;
return control;
в основном это только это. Элемент возврата добавляется на холст с помощью «Canvasname.Children.Add»
При создании элемента управления к нему добавляются события перетаскивания и перемещения.
Обновление 2
Раскадровка на элементе управления
<Storyboard x:Name="FadeIn">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="Control"
Storyboard.TargetProperty="Opacity">
<EasingDoubleKeyFrame KeyTime="0:0:0"
Value="0" />
<EasingDoubleKeyFrame KeyTime="0:0:1"
Value="1" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
Триггер раскадровки в mainpage.xaml.cs
MainCanvas.Children.Where(m => m.GetType() == typeof(ElementControl)).ToList().ForEach(m => (m as ElementControl).FadeIn.Begin());