WPF Multi-Touch 开发:基础触屏操作(Raw Touch)
多点触控(Multi-Touch)就是通过与触屏设备的接触达到人与应用程序交互的操作过程。例如,生活中经常使用的触屏手机、触屏笔记本、显示器以及微软最新的Surface 产品等这些都属于触屏操作设备。本篇将介绍如何开发能够支持MT 功能的应用程序。

在WPF 4 中已经具备的多点触控开发技术,当多个手指触碰到触屏设备时,WPF 会把每跟手指认为是一个触控设备,并为其分配唯一的识别ID,以便跟踪不同手指的操作手势。下面将通过实例演示WPF 所支持的低级别触控操作:触碰(TouchDown)、分离(TouchUp)、移动(TouchMove),它们都是一些最基础的操作模式。

创建项目
新建项目在XAML中写入如下代码,中只添加了 控件,其中包含TouchDown、TouchUp、TouchMove 三个基础触控事件。当手指触碰程序时便会在Canvas 中生成彩色圆圈,圆圈的位置随手指的移动而改变,手指离开触屏的同时圆圈消失。接下来将逐一讲解每个事件所完成的任务。

<Window x:Class="WpfRawTouch.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><Canvas x:Name="touchPad" Background="Gray"TouchDown="touchPad_TouchDown" TouchUp="touchPad_TouchUp" TouchMove="touchPad_TouchMove"></Canvas></Grid>
</Window>

TouchDown 事件主要是完成当触碰产生时在 控件中生成彩色圆圈的任务(C#代码如下)。使用Ellipse 创建随机颜色的圆圈,通过GetTouchPoint 方法获取触碰位置点,并调整圆圈在 中的位置。为了跟踪手指移动轨迹,需要将触屏设备ID 及UI 控件存储在集合movingEllipses 中。

private Dictionary<int, Ellipse> movingEllipses = new Dictionary<int, Ellipse>();
Random rd = new Random();private void touchPad_TouchDown(object sender, TouchEventArgs e)
{Ellipse ellipse = new Ellipse();ellipse.Width = 30;ellipse.Height = 30;ellipse.Stroke = Brushes.White;ellipse.Fill = new SolidColorBrush(Color.FromRgb((byte)rd.Next(0, 255),(byte)rd.Next(0, 255),(byte)rd.Next(0, 255)));TouchPoint touchPoint = e.GetTouchPoint(touchPad);Canvas.SetTop(ellipse, touchPoint.Bounds.Top);Canvas.SetLeft(ellipse, touchPoint.Bounds.Left);movingEllipses[e.TouchDevice.Id] = ellipse;touchPad.Children.Add(ellipse);
}
 当手指离开触屏时TouchUp 事件将被触发,首先将触碰设备从movingEllipses 集合中删除不再跟踪手指相关操作,并从<Canvas> 中将彩色圆圈移除。
private void touchPad_TouchUp(object sender, TouchEventArgs e)
{movingEllipses.Remove(e.TouchDevice.Id);Ellipse ellipse = movingEllipses[e.TouchDevice.Id];touchPad.Children.Remove(ellipse);
}

当手指在触屏上持续移动时TouchMove 事件触发,它来跟踪手指移动轨迹,并重新调整圆圈在 中的位置。

private void touchPad_TouchMove(object sender, TouchEventArgs e)
{Ellipse ellipse = movingEllipses[e.TouchDevice.Id];TouchPoint touchPoint = e.GetTouchPoint(touchPad);Canvas.SetTop(ellipse, touchPoint.Bounds.Top);Canvas.SetLeft(ellipse, touchPoint.Bounds.Left);
}

WPF Multi-Touch 开发:基础触屏操作(Raw Touch)相关推荐

  1. WPF Multi-Touch 开发:高级触屏操作(Manipulation)

    在上一篇中我们对基础触控操作有了初步了解,本篇将继续介绍触碰控制的高级操作(Manipulation),在高级操作中包含了一些特殊的触屏手势:平移.缩放.旋转,当然在WPF 中无需自行开发这些手势,只 ...

  2. unity中2D飞机游戏手指触屏操作的问题

    unity中2D飞机游戏手指触屏操作的问题 菜鸡记录一下在项目中遇到的坑 下面就是我用的代码 if (UnityEngine.Input.touchCount > 0) //每一帧触摸到的屏幕的 ...

  3. Discus 论坛 在 pc 电脑上 访问手机版 ( mobile ) 和 触屏版(touch)设置

    Discus 论坛在 pc 电脑上 访问手机版 ( mobile ) 和 触屏版(touch)设置 1.   更改用户代理 user agent 一般在浏览器上安装UserAgent Switcher ...

  4. UIAutomator2.0详解(UIDevice篇----触屏操作1)

    UIDevice中有20个方法,是关于触屏操作的,占方法总数的三分之一.数量看似很多,仔细分析一下,也就几类. (1)功能键型,7个,HOME,RECENT,BACK,DELETE,ENTER,MEN ...

  5. 软件测试 app自动化03 toast元素的定位 滑屏操作 触屏操作

    文章目录 1 toast元素的定位 2 滑屏操作 2.1 坐标 2.2 滑屏分类 3 触屏操作 3.1 查看元素坐标 3.2 例子 小结 1 toast元素的定位 toast元素就是建议的消息提示框, ...

  6. html让页面整体可以上下移动,html5 touch事件实现触屏页面上下滑动(二)

    上篇文章使用html5的touch事件把简单的滑动做出来了,实现了持续页面上下滑动的效果,参考之前的文章及代码html5 touch事件实现触屏页面上下滑动(一) 本文主要实现了一个效果:页面滑动到最 ...

  7. APP自动化测试-5.触屏操作及toast处理

    APP自动化测试-5.触屏操作及toast处理 文章目录 APP自动化测试-5.触屏操作及toast处理 前言 一.TouchAction常用方法 二.toast识别处理 前言 TouchAction ...

  8. android 使用shell模拟触屏_Appium常用操作之「微信滑屏、触屏操作」

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.滑屏操作 1.访问之后,马上就滑屏可以吗? 2.连续实现 2 次滑屏 3.代码 二.模拟触屏 ...

  9. wpf控件开发基础(1)

    从现在开始,我将尝试写有关wpf控件开发相关的知识,把文章这对我来说很难,所以这个系列的文章在时间跨度上可能会拖的比较长.我希望我介绍是比较详细的,而不仅仅是一个简单的控件开发流程.我是一个真正的We ...

最新文章

  1. Bootstrap框架和inconfont、font-awesome使用
  2. 监控组策略应用---组策略建模
  3. mysql查看连接数 (linux)
  4. 高级T-SQL第1级的阶梯:使用交叉连接来引入高级T-SQL
  5. linux cal 命令详解
  6. Vim直接打开Tampermonkey网址的方法。
  7. Java中使用JNA实现全局监听Linux键盘事件
  8. powershell快捷键_关于powershell的知识你知道多少呢
  9. observable java_java源码阅读Observable(观察者模式)
  10. 20145227《Java程序设计》第10周学习总结
  11. 滴滴配合警方调证不超 10 分钟;苹果否认恶意芯片报道;贝索斯建火箭中心 | 极客头条...
  12. 安卓库-图表库: MPChartView
  13. Python调用腾讯API进行营业执照核验
  14. CentOS操作系统服务器搭建MYSQL数据库
  15. python高维数据可视化_用pandas中的parallel_coordinates可视化高维数据
  16. Android 常用的语言代码与国家地区对照表
  17. java项目 无法重命名_无法重命名数据库?
  18. 我的世界租服务器怎么加组件,我的世界租赁服怎么加自己的mod
  19. Linux/服务器中文件下载
  20. 一场技术人的年终盛典:9个老兵对2016年总结与思考

热门文章

  1. Linux slab技术
  2. 【愚公系列】2023年06月 网络安全(交通银行杯)-星际争霸
  3. Windows自带的记事本中换行(回车)替换符的解决方案——观止
  4. 备份系统 由于内部错误备份应用程序无法启动  0x80070422
  5. 【C】C语言中02x 是什么意思
  6. 浅谈C#中的序列化和反序列化
  7. 12日的汶川地震让半个亚洲震动,让整个世界震惊。
  8. python3爬取有道云翻译
  9. android 优秀app界面设计,基于Android系统的App界面设计.doc
  10. wd移动硬盘支持linux,玩转移动硬盘存储之WD篇