Я использую обработчик событий ManipulationDelta
для перетаскивания простого эллипса на холсте по экрану. Я использую стандартный подход, опубликованный в Интернете в нескольких местах. Ниже приведен код в моем обработчике событий:
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 секунды между тем, когда пользователь начинает перетаскивание, и тем, когда эллипс фактически меняет свое положение. Я вижу, печатая в отладчике, что сам обработчик событий завершает выполнение почти мгновенно, поэтому я предполагаю, что у него есть что-то, что делает предварительно запрограммированную частоту обновления для всех UIElement на экране, что вызывает эту задержку?
Есть ли что-нибудь вокруг этой проблемы?