Pinch双指触摸
当有两根手指触摸屏幕时会发生 Pinch 序列;它通常被解释为扩展或收缩屏幕上的对象,也可能是对其进行旋转。
毫无疑问,捏指操作是最令人捉摸不定的多点触控处理领域之一,而且更高级别的界面无法提供充足的信息也不罕见。众所周知,Windows Phone 7 ManipulationDelta 事件使用起来特别复杂。
处理手势时,Drag 序列和 Pinch 序列是相互排斥的。它们不会重叠,但是它们可能会一个接一个地发生。例如,用一根手指触按屏幕,并拖动屏幕。这会生成一个 DragStarted 事件和多个 DragDelta 事件。现在用另一根手指触按屏幕。您将获得一个 DragCompleted 以结束 Drag 序列,该序列之后将发生一个 PinchStarted 事件和多个 PinchDelta 事件。现在保持第一根手指继续移动,但抬起第二根手指。这是一个用于结束 Pinch 序列的 PinchCompleted,接下来将发生 DragStarted 和 DragDelta。根据触摸屏幕的手指的数量,您基本上是在 Drag 序列和 Pinch 序列之间交替。
此 Pinch 手势的一个有用特征是,它不会丢弃信息。您可以使用事件参数的属性完全重建两根手指的位置,这样,在需要时,您始终可以回到基本原理。
在 Pinch 序列中,某根手指(让我们称其为主要手指)的当前位置在 GetPosition 方法中始终可用。在本次讨论中,我们称此返回值为 pt1。对于 PinchStarted 事件,PinchStartedGestureEventArgs 类具有两个附加属性,分别名为 Distance 和 Angle,用于指示第二根手指相对于第一根手指的位置。使用以下语句,您可以轻松地计算出此实际位置:
- Point pt2 = new Point(pt1.X + args.Distance * Cos(args.Angle),
- pt1.Y + args.Distance * Sin(args.Angle));
Angle 属性以度为单位,因此在调用 Math.Cos 和 Math.Sin 之前,您需要使用 Cos 和 Sin 方法将其转换为弧度。在 PinchStarted 处理程序结束前,您还希望将 Distance 和 Angle 属性保存到名字可能是 pinchStartDistance 和 pinchStartAngle 的字段中。
PinchDelta 事件附带一个 PinchGestureEventArgs 对象。同样,通过 GetPosition 方法您可以获得主要手指的位置,主要手指可能已经从其原来位置移动到其他位置。对于第二根手指,事件参数提供 DistanceRatio 和 TotalAngleDelta 属性。
DistanceRatio 是手指之间的当前距离与原始距离的比率,也就是说,您可以按如下方式计算当前距离:
- double distance = args.DistanceRatio * pinchStartDistance;
TotalAngleDelta 是手指之间的当前角度与原始角度之间的差异。您可以按如下方式计算当前角度:
double angle = args.TotalAngleDelta + pinchStartAngle;
现在您可以按照以前的方式计算第二根手指的位置:
- Point pt2 = new Point(pt1.X + distance * Cos(angle),
- pt1.Y + distance * Sin(angle));
在 PinchDelta 处理期间,您不需要将任何附加信息保存到字段中来进一步处理 PinchDelta 事件。
TwoFingerTracking 项目通过显示在屏幕上跟踪一根或两根手指的蓝色和绿色椭圆来演示此逻辑。
到此对于触控尤其是多指触控就讲解完了。
原文参考 https://msdn.microsoft.com/en-us/magazine/gg650664.aspx
下面对LongListSelector同时存在于Toolkit.dll 和 Microsoft.Phone.dll中的问题提供解决方案
如果你真的用了你可能会发现一个问题,longListSelector同时存在于ToolKit.dll与Microsoft.Phone.dll中,导致冲突。
这是为什么呢?难道写.dll的人傻吗,原因是longlistselector最先存在于toolkit中,后来被wp官方收编了,于是就出现了该死的冲突。
如你所想,像这类历史性问题多半会在新版本中得到解决。在wp7中存在冲突问题,而在wp8中这个问题得到解决了,所以安装wp8就好了。
但是问题来了,wp7版的toolkit存在.msi文件点击直接安装,而wp8就没有相应的文件了所以安装方法就繁琐了一点在这了我只提供链接就好了上面有详细的介绍,只不过是英文的,考验英文水平了。
安装链接 http://phone.codeplex.com/releases/view/107923
这是安装说明先安装NuGet之后 安装Windows Phone Toolkit Package 方法是打开 vs 的Package manager Console
输入 Install-Package WPtoolkit 。最后安装Multilingual App Toolkit for Visual Studio 这是一个.msi文件双击即可