如何计算 UWP 中 Canvas 的 PointerMoved 事件期间移动的距离?

How to calculate the distance moved during PointerMoved event of Canvas in UWP?

 Canvas c=new Canvas();
 c.Width=1200;
 c.Height=700;
 c.PointerMoved+=Moved;
 private void Moved(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
 {
        PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
        Point PointerPosition = CurrentPosition.Position;

 }

我不知道如何计算在此期间移动的距离 event.The PointerPosition 给出当前(x 和 y)。我需要计算在此事件期间移动的距离。

PointerMoved事件是一个持续触发的事件。如果要计算指针移动的距离,需要有一个“起点”。

Point StartPoint = new Point(0, 0);

...
c.PointerEntered += Entered;

private void Entered(object sender, PointerRoutedEventArgs e)
{
    PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
    StartPoint = CurrentPosition.Position;
}

private void Moved(object sender, PointerRoutedEventArgs e)
{
    PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
    Point PointerPosition = CurrentPosition.Position;
    double xDistance = Math.Abs(PointerPosition.X - StartPoint.X);
    double yDistance = Math.Abs(PointerPosition.Y - StartPoint.Y);
    double Distance = Math.Sqrt(xDistance * xDistance + yDistance * yDistance);
}

更新

如果我们需要计算两次PointerMoved事件之间指针位置的变化,就需要引入一个变量来记录最后一次指针位置。

Point PreviousPoint;
private void Moved(object sender, PointerRoutedEventArgs e)
{
    PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
    Point PointerPosition = CurrentPosition.Position;
    if (PreviousPoint != null)
    {
        double xDistance = Math.Abs(PointerPosition.X - PreviousPoint.X);
        double yDistance = Math.Abs(PointerPosition.Y - PreviousPoint.Y);
        double Distance = Math.Sqrt(xDistance * xDistance + yDistance * yDistance);
        // TODO use Distance
    }
    PreviousPoint = PointerPosition;
}

谢谢。