Как рассчитать расстояние, пройденное во время события PointerMoved для Canvas в UWP? - PullRequest
0 голосов
/ 09 июля 2020
 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;

 }

Я не знаю, как рассчитать расстояние, пройденное во время этого события. PointerPosition дает текущие (x и y). Мне нужно рассчитать расстояние, пройденное во время этого события.

1 Ответ

1 голос
/ 09 июля 2020

Событие 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;
}

Спасибо.

...