在Windows Phone 8.1中拖延UIElement的拖放

我正在使用ManipulationDelta事件处理程序在屏幕上的canvas中拖放一个简单的椭圆。 我正在几个地方使用在线发布的标准方法。 以下是我的事件处理程序中的代码:

 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秒的令人讨厌的延迟。 我可以通过打印到调试器看到事件处理程序本身几乎立即完成执行,所以我猜它有一些事情可以为屏幕上的所有UIElements做预编程刷新率导致这种延迟?

反正这个问题呢?

前段时间我遇到了同样的问题。 我想延迟是决定手势是拖动还是点击。 没有任何意外阻力,很难触摸屏幕。

要消除此延迟,可以使用PointerMovePointerPressed事件。 这是我的例子。 你有两个椭圆的canvas,可以毫不拖延地拖动。

XAML

       

如您所见,我正在处理canvas中的PointerPressed事件和椭圆中的PointerPressed事件。 重要的是canvas的背景对于处理触摸事件是不透明的。

C#

 public sealed partial class MainPage : Page { UIElement draggedItem = null; Point offset; public MainPage() { this.InitializeComponent(); this.NavigationCacheMode = NavigationCacheMode.Required; } private void Ellipse_PointerPressed(object sender, PointerRoutedEventArgs e) { draggedItem = sender as UIElement; offset = e.GetCurrentPoint(draggedItem).Position; } private void Canvas_PointerMoved(object sender, PointerRoutedEventArgs e) { if (draggedItem == null) return; Point dragPoint = e.GetCurrentPoint(Board).Position; Canvas.SetLeft(draggedItem, dragPoint.X - offset.X); Canvas.SetTop(draggedItem, dragPoint.Y - offset.Y); } } 

我认为代码非常简单易懂。 我使用PointerPressed来决定拖动哪个对象。 我也在计算一些偏移,因为我们想要相对于用户触摸的点移动对象。

截图