Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中管理多点触摸事件_C#_Wpf_Touch_Multi Touch_Pixelsense - Fatal编程技术网

C# 在WPF中管理多点触摸事件

C# 在WPF中管理多点触摸事件,c#,wpf,touch,multi-touch,pixelsense,C#,Wpf,Touch,Multi Touch,Pixelsense,我正在使用Surface SDK和.NET 4.0编写一个程序。我必须区分多点触摸事件,而且我很难区分手势 用两个手指我希望能够缩放和旋转,但因为通常手指在屏幕上不是直线或完美的圆圈移动,结果是缩放和旋转的组合。有人能指出如何克服这个问题吗?我正在使用一些阈值来忽略小偏差,但这些阈值需要手动调整,我找不到合适的值 我想我可以在onManipulationStarting方法中检测到它是哪种手势,而忽略其余的,但是有时候这个手势可能只从屏幕上的一个手指开始,而我正在识别错误的手势 我在下面包含一些

我正在使用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);
   }

有人能帮忙吗?谢谢

操纵API执行的数学不是为了让您有选择地应用旋转或缩放。当您将API配置为同时计算两者时,它假定您将同时应用两者。否则用户会觉得很尴尬。嗨,谢谢你的回复。如果一次只能执行一个操作,那么您将如何实现对旋转和缩放的支持?我不会实现这样的设计,除非控件上有特定的点,用户需要触摸以指示他们是在进行缩放还是旋转。在这种情况下,只需根据用户第一次触摸的位置切换ScatterViewItem的CanScale/CanRotate属性即可