Windows phone 8 在UniversalApps(WP8)中完成操作

Windows phone 8 在UniversalApps(WP8)中完成操作,windows-phone-8,touch,Windows Phone 8,Touch,我正在尝试实现拖放功能。我的问题是操纵完成事件触发得太晚。当我用手指快速移动并释放触摸时,我的物体会再飞半秒左右。我想防止在释放手指时调用OnManipulationDelta private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { Debug.WriteLine("Changed"); var

我正在尝试实现拖放功能。我的问题是操纵完成事件触发得太晚。当我用手指快速移动并释放触摸时,我的物体会再飞半秒左右。我想防止在释放手指时调用OnManipulationDelta

 private void UIElement_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
        {
            Debug.WriteLine("Changed");
            var element = e.OriginalSource as FrameworkElement;
            if (element != null)
            {
                TranslateTransform transform = element.RenderTransform as TranslateTransform;
                if (transform != null)
                {
                    transform.X += e.Delta.Translation.X;
                }
            }

        } 

请尝试触摸屏幕

是一种低级别方法,开销小,非常精确:

例如:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    Touch.FrameReported += Touch_FrameReported;
}

private void Touch_FrameReported(object sender, TouchFrameEventArgs e)
    {
        var point = e.GetPrimaryTouchPoint(this.CanvasLayer);

        if (TouchPanel.IsGestureAvailable)
        {
            GestureSample gesture = TouchPanel.ReadGesture();

            if (GestureType.Hold == gesture.GestureType)
            {
                IsActiveTouch = true;
                StartMoveWheel(point.Position);
                HoldWheel(sender, e);
            }
            else
            {
                this.CanvasLayer.ReleaseMouseCapture();
                IsActiveTouch = false;
            }
        }

        if (IsActiveTouch)
        {
            //Test if touch control is CanavasLayer
            if (point.TouchDevice.DirectlyOver == this.CanvasLayer)
            {
                switch (point.Action)
                {
                    case TouchAction.Move:
                        if (point != null) MoveWheel(point.Position);
                        break;
                    case TouchAction.Up:
                    default:
                        ExecuteCompletedMoveWheel();
                        break;
                }
            }
            else
            {
                ExecuteCompletedMoveWheel();
            }
        }
    }

解决方案是关闭惯性;) 我已经将操纵模式从All更改为TranslateX(因为我只想在X轴上平移我的元素)