【IT168专稿】Touch-ID概述
我们必须为屏幕上的每个手指分配一个唯一的Touch-id,只要手指触摸屏幕,相关的Touch-id将会为特定的手指保留下来,如果用户释放了他的手指,系统将会释放对应的Touch-id,下次触摸屏幕时会自动再分配一个Touch-id。那么如何得到Touch-id呢?可以从StylusEventArgs得到(如args.StylusDevice.Id),手写设备将会自动为每次触摸生成这个ID,你唯一要做的事情就是将它分配给每个手指触摸。
XAML实现
首先,我们要创建一个UserControl,它将由一个Image和RenderTransform功能需要的XAML代码组成,在上一篇文章中我们让图像显示在窗口(Window)中,这里我们要让图像显示在UserControl(UserControl类)中。创建一个依赖属性(DependencyProperty),动态指定图像位置(ImageLocation)。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Image Source="{Binding Path=ImageLocation}" Stretch="Fill" Width="Auto"
Height="Auto" RenderTransformOrigin="0.5, 0.5">
<Image.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="trRotate"/>
<ScaleTransform x:Name="trScale"/>
<TranslateTransform x:Name="trTranslate"/>
</TransformGroup>
</Image.RenderTransform>
</Image>
</UserControl>
代码实现
为了同时跟踪上面UserControl中“Picture”的多点触摸,你可以使用Window 7培训工具包中的PictureTracker类,从http://www.microsoft.com/downloads/details.aspx?FamilyID=12100526-ed26-476b-8e20-69662b8546c1&displaylang=en这里下载,它看起来是下面这个样子:
/// Track a single picture
/// </summary>
public class PictureTracker
{
private Point _prevLocation;
public Picture Picture { get; set; }
public void ProcessDown(Point location)
{
_prevLocation = location;
}
public void ProcessMove(Point location)
{
Picture.X += location.X - _prevLocation.X;
Picture.Y += location.Y - _prevLocation.Y;
_prevLocation = location;
}
public void ProcessUp(Point location)
{
//Do Nothing, We might have another touch-id that is
//still down
}
}
现在我们存储了所有与PictureTracker类相关的活动touch-id,因此我们将使用一个字典,这里我们要使用了一个来自Window 7培训包中的PictureTrackerManager类。
在你的Window1.xaml.cs中创建一个PictureTrackerManager类的实例,使用PictureTrackerManager事件注册指示笔(触摸)事件,现在起,无论何时触摸屏幕上的图片,PictureTrackerManager将会先为各个实例找到相关的touch-id,然后根据手指操作触发不同的事件,如手指按下,移动,释放等。
StylusDown += _pictureTrackerManager.ProcessDown;
StylusUp += _pictureTrackerManager.ProcessUp;
StylusMove += _pictureTrackerManager.ProcessMove;
小结
本文所介绍的仅仅是一个最简单的代码实现,你完全可以根据你的业务需要进行修改。
原文出处:http://www.dotnetspark.com/kb/1667-windows-7-multitouch-application-development.aspx