一起谈.NET技术,WPF Multi-Touch 开发:基础触屏操作(Raw Touch)

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

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

  创建项目

  新建项目在XAML中写入如下代码,<Grid>中只添加了<Canvas> 控件,其中包含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 事件主要是完成当触碰产生时在<Canvas> 控件中生成彩色圆圈的任务(C#代码如下)。使用Ellipse 创建随机颜色的圆圈,通过GetTouchPoint 方法获取触碰位置点,并调整圆圈在<Canvas> 中的位置。为了跟踪手指移动轨迹,需要将触屏设备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 事件触发,它来跟踪手指移动轨迹,并重新调整圆圈在<Canvas> 中的位置。

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);}

  程序演示

  至此,一个简单的触控应用程序就完成了编译并运行该程序,用手指触碰屏幕并持续移动看看是否会出现下面视频中的情况(如果没有多点触屏设备请参考这里解决)。

  源码下载:WpfRawTouch.zip

时间: 2024-10-30 12:24:05

一起谈.NET技术,WPF Multi-Touch 开发:基础触屏操作(Raw Touch)的相关文章

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

多点触控(Multi-Touch)就是通过与触屏设备的接触达到人与应用程序交互的操作过程.例如,生活中经常使用的触屏手机.触屏笔 记本.显示器以及微软最新的Surface 产品等这些都属于触屏操作设备.本篇将介绍如何开发能够支持MT 功能的应用程序. 在WPF 4 中已经具备的多点触控开发技术,当多个手指触碰到触屏设备时,WPF 会把每跟手指认为是一个触控设备,并为其分配唯一的 识别ID,以便跟踪不同手指的操作手势.下面将通过实例演示WPF 所支持的低级别触控操作:触碰(TouchDown).分

一起谈.NET技术,WPF Multi-Touch 开发:高级触屏操作(Manipulation)

在上一篇中我们对基础触控操作有了初步了解,本篇将继续介绍触碰控制的高级操作(Manipulatioin),在高级操作中包含了一些特殊的触屏手势:平移.缩放.旋转,当然在WPF 中无需自行开发这些手势,只需将UI 控件的IsManipulationEnabled 属性激活,并通过以下四种事件完成各种触屏手势操作:ManipulationStarting.ManipulationStarted.ManipulationDelta.ManipulationInertiaStarting.Manipul

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

在上一篇中我们对基础触控操作有了初步了解,本篇将继续介绍触碰控制的高级操作(Manipulatioin),在高级操作中包含了一些特殊 的触屏手势:平移.缩放.旋转,当然在WPF 中无需自行开发这些手势,只需将UI 控件的IsManipulationEnabled 属性激活,并通过以下 四种事件完成各种触屏手势操作:ManipulationStarting.ManipulationStarted. ManipulationDelta.ManipulationInertiaStarting. Man

Windows 8.1应用开发之触控操作

与WPF相同Windows 8.1应用中也具有高级触控操作(Manipulation),其中包含了三种常见的触屏手势:平移.缩放.旋转,通过以下四种事件可为控件实现各种触控操作:ManipulationStarting.ManipulationStarted.ManipulationDelta.ManipulationInertiaStarting.ManipulationCompleted. 开发之触控操作-windows应用程序开发"> 打开Visual Studio 2013 Pre

Swatch打算出新的触屏电子表Swatch Touch Zero One

摘要: 在其不充电智能手表还没有问世之前,Swatch打算出一款新的触屏电子表Swatch Touch Zero One. 从官方视频来看,这款手表主要为排球运动量身定制,它可以记录击球力度.次数(low hits, h 在其不充电智能手表还没有问世之前,Swatch打算出一款新的触屏电子表--Swatch Touch Zero One. 从官方视频来看,这款手表主要为排球运动量身定制,它可以记录击球力度.次数(low hits, high hits, power hits, and high-

Swatch将出一款新的触屏电子表Swatch Touch Zero One

摘要: 在其不充电智能手表还没有问世之前,Swatch打算出一款新的触屏电子表Swatch Touch Zero One. 从官方视频来看,这款手表主要为排球运动量身定制,它可以记录击球力度.次数(low hits, h 在其不充电智能手表还没有问世之前,Swatch打算出一款新的触屏电子表--Swatch Touch Zero One. 从官方视频来看,这款手表主要为排球运动量身定制,它可以记录击球力度.次数(low hits, high hits, power hits, and high-

使用C#开发Metro 风格应用的路线图 -- 触屏操作

原文 http://www.cnblogs.com/icuit/archive/2012/05/01/2478312.html win8支持多点触摸技术,而我们在屏幕上所做的各种操作,也最终转换为输入,包括 操作 描述 Tap 一个指头轻点一下屏幕 Hold 一个指头按住屏幕不动 Drag 一个或多个指头按住屏幕并相相同的方向移动 Pinch 两个指头按住屏幕越来越近或越来越远 Rotate 两个批判按住屏幕做顺时或逆时针旋转 Cross-slide 一个指头按住一个对象向某个方向滑动.  在w

一起谈.NET技术,网络硬盘开发技巧之ASP.NET+XML

文件传送常用的三种方式FTP.Email及"网上邻居"都在一定程度上实现了文件数据的交流,但它们都主要面向"点对点"的传送,无法实现"一块空间,资源互见"的应用需求,这种基于"点对多"的共享模式需要寻求另外的传输途径,网络硬盘就是一种很好的解决方式.常用传输方式及其在特定环境下面临的困难我们经常有这样的应用需求:通过网络交换公共数据文件以实现资源共享,同时保护私有数据不被非法访问,并使用简单.直观的方式操作. 英国Ewedri

一起谈.NET技术,Silverlight 游戏开发小技巧:传送点特效制作

前面我们使用投影(Projection)完成了一个升级的特效,Silverlight故事板动画相当的容易,这次我们将详细说说故事板动画的帧制作,完成一个循环的传送点特效,大家都知道,在游戏中,传送点一般是固定在某一个地方,循环播放,它通常表明这里会有一个事件之类的特殊地点,我们将用前面的升级特效稍微改造,就可以得到了: 这个系列只是有关于游戏开发的小技巧,相比纯粹的技术文章要简单一些,我个人感觉可能更加偏向于Blend美工方面的工作,能够为各位Silverlight开发者带来一些新的思路,就是一