LayoutRoot_PointerPressed
LayoutRoot_PointerReleased(有些控件可能三PointerExited)
这2个事件不一定标准,对于不同的控件有不同的事件响应,具体的大家自己去试。但Pointer(xxx)的都是用来响应手势的。
PointerMoved这个三移动的时候的事件(但是对于鼠标来说是很变态的,只要鼠标指针在控件上,它就会一直执行)。
#region 手势
Point start = new Point();
Point end = new Point();
Stopwatch s = new Stopwatch();
private void LayoutRoot_PointerPressed(object sender, PointerRoutedEventArgs e)
{
start = e.GetCurrentPoint(LayoutRoot).Position;
s.Restart();
}
private void LayoutRoot_PointerReleased(object sender, PointerRoutedEventArgs e)
{
s.Stop();
long time = s.ElapsedMilliseconds;
end = e.GetCurrentPoint(LayoutRoot).Position;
double angle = 0;
if (Math.Abs(end.X - start.X) < 1 && Math.Abs(end.Y - start.Y) < 1)
{
angle = 0;
}
else if (end.X > start.X)
{
if (end.Y > start.Y)
{
angle = 360 - Math.Atan((end.Y - start.Y) * 1.0 / (end.X - start.X)) * 180 / Math.PI;
}
else
{
angle = Math.Atan((start.Y - end.Y) * 1.0 / (end.X - start.X)) * 180 / Math.PI;
}
}
else if (end.X < start.X)
{
if (end.Y > start.Y)
{
angle = Math.Atan((end.Y - start.Y) * 1.0 / (start.X - end.X)) * 180 / Math.PI + 180;
}
else
{
angle = 180 - Math.Atan((start.Y - end.Y) * 1.0 / (start.X - end.X)) * 180 / Math.PI;
}
}
double length = Math.Sqrt((end.X - start.X) * (end.X - start.X) + (end.Y - start.Y) * (end.Y - start.Y));
Debug.WriteLine("速度" + length / time);
if (angle == 0.0)
{
//点击
return;
}
else if (angle < 45 || angle > 315)
{
//从左向右滑
}
else if (angle > 135 && angle < 225)
{
//从右向左滑
}
else
{
//根据自己需要的角度进行判断。
}
}
#endregion