Използвам манипулатора на събития 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 секунда между момента, в който потребителят започне да плъзга, до момента, в който елипсата действително промени позицията си. Мога да видя, като отпечатам в Debugger, че самият манипулатор на събития завършва изпълнението почти мигновено, така че предполагам, че има нещо, което да направи предварително програмирана честота на опресняване за всички UIElements на екрана, което причинява това забавяне?
Има ли все пак около този проблем?