在WPF中管理多点触控事件

时间:2013-06-17 12:00:54

标签: c# wpf touch multi-touch pixelsense

我正在使用Surface SDK和.NET 4.0编写程序。我必须区分多点触控事件,而且我无法区分手势。

我想用两根手指进行缩放和旋转,但由于手指一般不会在屏幕上以直线或完美的圆圈移动,因此结果是缩放和旋转的组合。有人能指出如何克服这个问题吗?我使用一些阈值来忽略小偏差,但这些阈值需要手动调整,我找不到合适的价值。

我在想我可以在onManipulationStarting方法中检测出哪种手势并忽略其余的手势,但有时手势可以从屏幕上只有一根手指开始,我正在识别错误​​的手势。

我在下面提供了一些代码:

private void OnManipulationDeltaHandler(object sender, ManipulationDeltaEventArgs mdea)
    {
         var zoomAmount = Math.Abs(mdea.DeltaManipulation.Scale.Length - Math.Sqrt(2));
                // ZOOM ACTION: 2 fingers and scaling bigger than a threshold
                if ((TouchesOver.Count() == 2) && (zoomAmount > scaleThreshold))
                {
                    if (ZoomCommand != null)
                    {
                       if (Math.Abs(zoomAmount - 0) > 0.1)
                        {
                            ZoomCommand.Execute((-zoomAmount).ToString());
                        }
                    }
                }
                else
                {
                    var rotateAmount = -mdea.DeltaManipulation.Rotation;
                    if ((TouchesOver.Count() == 2))
                    {
                        headValue += rotateAmount;
                        if (HeadRotationCommand != null)
                        {
                            HeadRotationCommand.Execute(new Orientation(pitchValue, headValue, rotateAmount));
                        }
                    }
                }               

        mdea.Handled = true;
        base.OnManipulationDelta(mdea);
   }

有人可以帮忙吗?谢谢!

0 个答案:

没有答案