Я использую обработчик события ManipulationDelta
, чтобы перетащить простой эллипс на холсте по всему экрану. Я использую стандартный подход, размещенный в Интернете в нескольких местах. Ниже приведен код в моем обработчике события:Задержка при перетаскивании UIElement в Windows Phone 8.1
Ellipse dragableItem = sender as Ellipse;
TranslateTransform translateTransform = dragableItem.RenderTransform as TranslateTransform;
double newPosX = Canvas.GetLeft(dragableItem) + translateTransform.X + e.Delta.Translation.X;
double newPosY = Canvas.GetTop(dragableItem) + translateTransform.Y + e.Delta.Translation.Y;
if (!isCanvasBoundary(newPosX, TestCanvas.ActualWidth - dragableItem.ActualWidth, 0))
translateTransform.X += e.Delta.Translation.X;
if (!isCanvasBoundary(newPosY, TestCanvas.ActualHeight - dragableItem.ActualHeight, 0))
translateTransform.Y += e.Delta.Translation.Y;
операция перетаскивания работает отлично, но есть неприятная задержка около 1 секунды между моментом, когда пользователь начинает перетаскивание, когда эллипс фактически меняет свое положение. Я могу видеть, распечатывая в Debugger, что сам обработчик событий заканчивает выполнение почти мгновенно, поэтому я предполагаю, что он имеет что-то, чтобы выполнить запрограммированную частоту обновления для всех UIElements на экране, что вызывает эту задержку?
Есть ли вообще вокруг этой проблемы?
Спасибо, большое спасибо! Одна из незначительных проблем заключалась в том, что последний перемещенный эллипс изменил бы положение, даже если пользователь нажимает на часть холста, где эллипс не находится. Чтобы исправить это, я добавил событие «PointerReleased» и простую переменную bool, которая установлена в true в «PointerPressed» и обратно на false в «PointerReleased». Тогда в 'PointerMoved' я проверил бы bool и только переместил бы эллипс, если бы это было правдой. Кроме того, я обнаружил, что печать чего-либо в отладчике из события «PointerMoved» знаменует существенное отставание. – Ali250
@ Ali250 Более простым способом было установить 'draggedItem = null;' в событии PointerReleased вместо того, чтобы настраивать новую переменную bool –
отличное альтернативное решение +1. – hushyon