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