WPF 不仅支持触控,也支持笔的输入,比如现在比较高大上的电磁笔。便宜的板子一般不配备电磁笔,而是配电容笔,虽然也号称XXX级压感,但是效果自然不可与电磁笔相比。

UIElement 类规范了UI元素的基本轮廓,在该类公开的事件中,大凡以 Stylus 开头的事件,都与书写笔有关。这里大伙伴要注意一点,当笔尖按下屏幕时会发生 StylusDown 事件,但是,此时我们还不能够得到笔的压力值。

紧随其后就会发生 StylusMove 事件。笔按下后就会马上引上这个事件,而且,只要笔在屏幕上移动就会不断引发这个事件,前提是你在移动笔尖时不能离开屏幕。如果笔尖提起,会发生 StylusUp 事件;笔尖提起后,处于悬空状态,只要笔还在感应范围内,移动笔尖会发生 StylusInAirMove 事件。注意区别,笔尖按下时移动发生的是 StylusMove 事件,而悬空后移动会发生 StylusInAirMove 事件

笔输入的数据由 StylusPoint 结构来封装,其中,X和Y相信你也猜到,就是笔尖的坐标,这点与鼠标事件相似。不过,笔输入的数据还带有一个 PressureFactor 字段,对,重点就是它了,它表示笔的压力。

不管你的笔是 256 级压感,还是 1024 级 2048 级压感,PressureFactor 字段值始终在 0 和 1 之间,它是个浮点数值,数字越小,表示压力越小;反之表示压力越大。

好了,经过老周上面一堆废话,估计你也已经知道这活怎么干了。下面,还是老规矩,学习不干活是不行的,所以,我们得动手,才能弄懂。

首先,在窗口上放一个矩形。

    <Grid Background="Transparent">
<Rectangle Fill="Red" Name="rect" />
</Grid>

把这个矩形的填充颜色设为红色,待会儿咱们感应电磁笔的压力,动态调整矩形的透明度。压力越大,矩形越红,比那些网红还要红。

接着,处理相关事件。

 <Rectangle Fill="Red" Name="rect"
StylusMove="OnStyluesMove"
/>

然后编写处理代码。

        private void OnStyluesMove(object sender, StylusEventArgs e)
{
var pts = e.GetStylusPoints(null);
foreach (var p in pts)
{
rect.Opacity = p.PressureFactor;
}
}

因为笔尖在屏幕上移动时,可能一次会产生N个坐标,所以,GetStylusPoints方法返回一个点的集合,这个方法在调用时,需要传递一个元素引用,用来作为参照对象,即,所获取的坐标是相对于这个对象。此处用 null 表示获取到的点是相对于根,如窗口。

由于笔尖的一次移动可能产生多个点,这里我顺便 foreach 了一下,其实,眼睛看到的最后一轮设置的值。因而你完全可以去掉这个 foreach ,在点集合中,只取出一个点出来就行了(最后一个点)。我姑且保留 foreach ,大伙儿可以下载源码后,自行玩耍。

巧合的是,Opacity 属性的值范围是 0 到 1,PressureFactor 的值范围也是 0 到 1,所以,直接赋值就完事了,不用转化计算。

最后运行程序,然后拿电磁笔狠狠地扎几下窗口,你就能看到压感的变化了。效果请参考下面的高清无码无水印动图。

好,今天就聊到这里,see you。

示例源代码下载地址

【WPF】获取电磁笔的压感的更多相关文章

  1. CDR 2017压感笔和压感设备该怎么设置使用?

    您可以通过CorelDRAW 2017 中的以下工具来运用压感笔.笔或其他设备的压力:艺术笔(表达模式).橡皮擦.涂抹.转动.吸引.排斥.粗糙和弄脏.此外,您还可以通过艺术笔(表达模式)工具.橡皮擦. ...

  2. WPF 获取程序路径的一些方法,根据程序路径获取程序集信息

    一.WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.AppDomain.CurrentDomain.BaseDirector ...

  3. WPFの获取任意元素的位置

    如果布局在Grid中: 方法一: //_stackPanel为子元素,_grid为父元素 Point point = _stackPanel.TranslatePoint(new Point(0, 0 ...

  4. c# WPF 获取网络图片,验证码

    c# WPF 获取网络图片,验证码 public static BitmapImage getValidCodeBitmap() { string url = "http://my.baaa ...

  5. WPF 获取应用的所有窗口

    原文:WPF 获取应用的所有窗口 本文告诉大家如何获取应用内的所有窗口,无论这些窗口有没显示 在 WPF 可以通过 Application.Current.Windows 列举应用的所有窗口 fore ...

  6. WPF 获取 ListView DataTemplate 中控件值

    原文:WPF 获取 ListView DataTemplate 中控件值 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei19 ...

  7. WPF 获取鼠标屏幕位置、窗口位置、控件位置

    原文:WPF 获取鼠标屏幕位置.窗口位置.控件位置 public struct POINT { public int X; public int Y; public POINT(int x, int ...

  8. WPF获取外部EXE图标最简单的方法

    原文:WPF获取外部EXE图标最简单的方法 首先在工程添加对System.Drawing的引用 创建以下方法: public static ImageSource GetIcon(string fil ...

  9. [WPF]获取鼠标指针下的元素

    原文:[WPF]获取鼠标指针下的元素   [WPF]获取鼠标指针下的元素 周银辉 以前写过一些GetElementUnderMouse之类的函数,要用到坐标换算而显得有些麻烦(特别是当元素有XXXTr ...

随机推荐

  1. 线程同步synchronized,Class与Object

    synchronized (class):class类的同步,同步的时候会同步整个class 与 synchronized (Object):Object的同步,只对其中的对象同步 如下:对类B中的同 ...

  2. 一个请求中,ADF、JSF究竟做了哪些工作

    在Oracle ADF开发中,一个请求发生后,经过ADF处理后,我们可以很快得到响应页面,但在请求过程中ADF框架在背后究竟做了什么东西呢?今天让我们一起来了解下,ADF.JSF是基于组件模型的,不同 ...

  3. Failed to connect to Xilinx hw_server. Check if the hw_server is running and correct TCP port is used.

    Failed to connect to Xilinx hw_server. Check if the  hw_server is running and correct TCP port is us ...

  4. JS页面打开方式丶对话框及页面跳转方式

    一.js页面的三种打开方式 1. window.open 2. window.navigate("url") 跳转到目标页面 3. window.location.href=&qu ...

  5. Android Studio项目构建常见问题解决

    1. 创建或导入项目后编译时一直在等待 问题: 原因:AS连网去下载gradle了,但是网络不好或不通 解决:禁用网络,AS就会立即自动终止下载进入到主界面了.此时再去指定离线的gradle版本进行编 ...

  6. 【Java基础 】Java7 NIO Files,Path 操作文件

    从Java1.0到1.3,我们在开发需要I/O支持的应用时,要面临以下问题: 没有数据缓冲区或通道的概念,开发人员要编程处理很多底层细节 I/O操作会被阻塞,扩展能力有限 所支持的字符集编码有限,需要 ...

  7. 前端MVC框架之 Angular

    一.什么是Angular jQuery,它属于一种类库(一系列函数的集合),以DOM为驱动核心:而Angular是一种 MVC 的前端框架,则是前端框架,以数据和逻辑为驱动核心,它有着诸多特性,最重要 ...

  8. css2.1实现圆角边框

    虽然css3的border-radius实现圆角很简单,但是我还是认为css2.1中好多技术还是很值得学习的,我也是后来才知道这就是传说中的滑动门技术.脑洞大开啊 附上demo <!DOCTYP ...

  9. 20155206 2016-2017-2 《Java程序设计》第5周学习总结

    20155206 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 Java中所有错误都会被打包为对象,运用try.catch,可以在错误发生时显示友好的错误信 ...

  10. win8如何显示文件后缀名

    按快捷键[WIN+X]然后点击[文件资源管理器]   进入我的电脑后点击菜单栏的[查看]   查看下面有一个[文件扩展名]把前面那个勾,勾上就可以显示后缀名了.   同样的道理取消勾就是隐藏后缀名. ...