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

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 集合中删除不再跟踪手指相关操作,并从 中将彩色圆圈移除。

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BeanGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值