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

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

  多点触控(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

目录
相关文章
|
2月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
2月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
3月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
61 5
|
3月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
60 4
|
3月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
59 3
|
3月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
56 3
|
3月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
82 3
|
9月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
451 0
|
9月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
182 1
|
6月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件

热门文章

最新文章