Ситуация/ПроблемаДобавление детей к холсту, давая мне лаг
Я пытаюсь создать небольшую игру, которая нуждается во мне, чтобы добавить количество X элементов управления на холсте.
Когда количество элементов управления низкое, все работает отлично. Элемент управления добавляется, и после этого запускается раскадровка, которая изменяет непрозрачность от 0 до 1 в 0,5 сек. Однако, когда есть более чем 30/40 элементов управления, программа «отстает», а первые .2 сек раскадровки «пропущены».
Элемент управления изображением с текстовым полем под ним.
Прежде чем элемент управления будет добавлен к холсту, он должен быть сделан.
Вопрос
Как я могу изменить свою программу, поэтому элементы управления получить правильно добавлены и раскадровка играли без не отставать не Mather, сколько элементов управления Мне нужно добавить?
Возможно, что-то с операцией ASync, которая создает элемент управления?
Любые идеи приветствуются, но, пожалуйста, присылайте идею, дайте небольшой пример.
Связывание MVVM не является вариантом.
Update
метод, чтобы получить новый элемент
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»
В создании элемента управления элементы управления перемещением, перетаскиванием и перемещением добавляются в элемент управления.
Update 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());
Обновлено мое сообщение с небольшим кодом, которым я могу поделиться. –
похоже, что создание управления не ваша проблема, потому что этот код должен работать быстрее, чем вы можете мигать. У меня такое ощущение, что сложность анимации замедляет ваш плагин. Как начать анимацию? –
второе обновление опубликовано. Заметьте, я сделал это длятся на секунду, поэтому раскадровка фактически показана. Я предпочитаю его на .2 или .3, где он показан, но не досадно долгое время, поскольку управление не может использоваться во время раскадровки. Однако в текущих настройках, установив его на .2, он просто выскочит без какого-либо затухания (если имеется более 25-30 элементов управления). –