WPF中有单独的触摸事件,也可以开启触摸消息。系统为了兼容老的应用程序,触摸消息会模拟成鼠标事件传递。某些应用场景,我们必须得获取到触摸面积才好开展我们的业务。下面整理几种获取触摸面积的方法。

WPF中提供的触摸事件有Touch事件,Stylus事件或者通过StylusPlugIns注入。

一、通过触摸事件获取

Touch事件中,可以通过参数TouchEventArgs获取。


//这个是Touch事件传递的参数
TouchEventArgs e;

var area = e.GetTouchPoint(null).Bounds;
//或者
var area = e.TouchDevice.GetTouchPoint(null).Bounds;

获取触摸的边界值,触摸面积也就是Size值。

二、通过触摸点获取

如果是通过Stylus事件或者StylusPlugIns,可以从StylusPoint中获取。

        //通过这种方式获取触摸点集
        var stylusPoints= e.GetStylusPoints(null);
        //stylusPointProperty 参数可以是 StylusPointProperties.Height 或者 StylusPointProperties.Width

        public static double GetStylusPointProperty(StylusPoint stylusPoint, StylusPointProperty stylusPointProperty)
        {
            double value = 0.0;
            //这里没有做限制是高度或者宽度属性,只做演示,可以自己加逻辑
            if (stylusPoint.HasProperty(stylusPointProperty))
            {
                value = stylusPoint.GetPropertyValue(stylusPointProperty);

                StylusPointPropertyInfo propertyInfo = stylusPoint.Description.GetPropertyInfo(stylusPointProperty);

                if (!DoubleUtil2.AreClose(propertyInfo.Resolution, 0.0))
                {
                    value /= propertyInfo.Resolution;
                }
                else
                {
                    value = 0.0;
                }

                //属性值的单位
                if (propertyInfo.Unit == StylusPointPropertyUnit.Centimeters)
                {
                    value /= 2.54;
                }
                
                value *= 96.0;
            }

            return value;
        }


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/WPF-%E8%8E%B7%E5%8F%96%E8%A7%A6%E6%91%B8%E9%9D%A2%E7%A7%AF%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E6%B3%95.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系