原文出自:http://www.bcmeng.com/windows-phone-touch/

UIElement类的触控事件:

ManipulationStarting:当用户将手指放在 IsManipulationEnabled 属性设置为true的元素上时,将在该元素上发生 ManipulationStarting 事件。即在触控操作开始之前引发。

ManipulationStarted:在触控操作开始之后引发。

ManipulationInertiaStarting:当触控操作终止并开始惯性运动时引发该事件。

ManipulationDelta:当用户在操作过程中将手指拖过屏幕并且在惯性发生时又重复操作时,该事件会多次发生。只要触控操作中任何参数的变化都会引发该事件,比如位置,角度等。

(注意ManipulationDelta里面有俩个十分重要的属性:Delta和Cumulative。Delta属性是指当前发生ManipulationDelta事件时的所有数据,Cumulative是指从触控操作开始一来发生的所有数据的更改。ManipulationDelta事件的Complete()方法可以终止惯性运动)

ManipulationCompleted:触控操作完成时引发该事件

(注:e.OriginalSource可以获取引发触控的对象,e.Handled可以终止路由事件继续向上传递,  e.Position可以获取当前位置坐标)

关于触控事件引发的顺序:(注:ManipulationDelta 事件会被引发多次)

  • ManipulationStarting
  • ManipulationStarted
  • ManipulationDelta
  • ManipulationInertiaStarting
  • ManipulationDelta
  • ManipulationCompleted

我们可以通过一个Rectangle做一个测试来验证触控事件的引发顺序:(注:必须要设置ManipulationMode属性,否则不会引发触控事件)

<Rectangle Name=”rect” Width=”″
Height=”″ Fill=”Yellow”
ManipulationMode=”All”
ManipulationCompleted=”rect_ManipulationCompleted”
ManipulationDelta=”rect_ManipulationDelta” ManipulationInertiaStarting=”rect_ManipulationInertiaStarting” ManipulationStarted=”rect_ManipulationStarted”
ManipulationStarting=”rect_ManipulationStarting”
PointerCanceled=”rect_PointerCanceled”
PointerEntered=”rect_PointerEntered”
PointerExited=”rect_PointerExited”
PointerMoved=”rect_PointerMoved”
PointerPressed=”rect_PointerPressed”
PointerReleased=”rect_PointerReleased”
RightTapped=”rect_RightTapped”
Tapped=”rect_Tapped”
>
</Rectangle>

后台代码:

private void rect_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
Debug.WriteLine(“{}-ManipulationCompleted事件发生”, DateTime.Now.ToString(“H:m:s”));
}
private void rect_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
Debug.WriteLine(“{}-ManipulationDelta事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingRoutedEventArgs e)
{
Debug.WriteLine(“{}-ManipulationInertiaStarting事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
Debug.WriteLine(“{}-ManipulationStarted事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e)
{
Debug.WriteLine(“{}-ManipulationStarting事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_PointerCanceled(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{}-PointerCanceled事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_PointerEntered(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{}-PointerEntered事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_PointerExited(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{}-PointerExited事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_PointerMoved(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{}-PointerMoved事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_PointerPressed(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{}-PointerPressed事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_PointerReleased(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{}-PointerReleased事件发生”, DateTime.Now.ToString(“H:m:s”));
} private void rect_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
Debug.WriteLine(“{}-RightTapped事件发生”, DateTime.Now.ToString(“H:m:s”));
//rect.Fill = new SolidColorBrush(Colors.Blue);
} private void rect_Tapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine(“{}-Tapped事件发生”, DateTime.Now.ToString(“H:m:s”));
//rect.Fill = new SolidColorBrush(Colors.Red);
}

当我们滑动矩形时,会发现输出如下:

::-PointerEntered事件发生
::-PointerPressed事件发生
::-ManipulationStarting事件发生
::-PointerExited事件发生
::-ManipulationStarted事件发生
::-ManipulationDelta事件发生
::-ManipulationDelta事件发生
::-ManipulationDelta事件发生
::-ManipulationCompleted事件发生
::-PointerReleased事件发生

下面我们继续通过这个矩形来演示一个实例,通过触控拖动和旋转矩形:

首先设置一个复合变换 CompositeTransform:

CompositeTransform cpTransform = null;

再在mainpage的初始化方法中设置矩形的ManipulationMode 属性。

rect.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY | ManipulationModes.Rotate;

然后对矩形应用变换:

cpTransform = new CompositeTransform();
cpTransform.TranslateX = cpTransform.TranslateY = 0;
cpTransform.Rotation = 0;
//cpTransform.ScaleX = cpTransform.ScaleY = 1;
cpTransform.CenterX = rect.Width / 2;
cpTransform.CenterY = rect.Height / 2;
rect.RenderTransform = cpTransform;

最后在ManipulationDelta事件中处理触控事件:

cpTransform.TranslateX += e.Delta.Translation.X;
cpTransform.TranslateY += e.Delta.Translation.Y;
cpTransform.Rotation += e.Delta.Rotation;

运行效果如下:

下面我们再来演示一个利用触控缩放照片的实例:

<Image Width=”″ Height=”″ Name=”image”
Source=”.jpg” Stretch=”Fill”
ManipulationDelta=”image_ManipulationDelta”
ManipulationMode=”Scale”/>

后台代码:

ScaleTransform scaleTransform;
public Image()
{
this.InitializeComponent();
scaleTransform = new ScaleTransform();
scaleTransform.CenterX = image.Width / ;
scaleTransform.CenterY = image.Height / ;
scaleTransform.ScaleX = scaleTransform.ScaleY = ;
image.RenderTransform = scaleTransform;
}
private void image_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
scaleTransform.ScaleX*= e.Delta.Scale;
scaleTransform.ScaleY*= e.Delta.Scale;
}

运行效果如下:

指针事件我们放到下一篇吧。

windows phone 8.1开发:触控和指针事件1的更多相关文章

  1. Windows Phone 8.1开发:触控和指针事件2

    原文出自:http://www.bcmeng.com/windows-phone-touch1/ 请在此输入内容(想死啊,写了一个小时,直接没保存不小心删掉了.那就简单说说吧)Pointer事件有以下 ...

  2. Windows 8.1 应用开发 – 触控操作

    与WPF相同Windows 8.1应用中也具有高级触控操作(Manipulation),其中包含了三种常见的触屏手势:平移.缩放.旋转,通过以下四种事件可为控件实现各种触控操作:Manipulatio ...

  3. c# 开发ActiveX控件,添加事件,QT调用事件

    c# 开发 ActiveX 的过程参考我的另一篇文章 :  https://www.cnblogs.com/baqifanye/p/10414004.html 本篇讲如何 在C# 开发的ActiveX ...

  4. Windows phone 8 学习笔记(1) 触控输入(转)

    Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此在输入方式上引入一套全新的触控操作方式,我们需要重新定义相关的事 ...

  5. Windows phone 8 学习笔记(1) 触控输入

    原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...

  6. 安卓Tv开发(一)移动智能电视之焦点控制(触控事件)

    前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验风格上有很大的区别,本系列博 ...

  7. WPF触控程序开发(四)——MultiTouchVista_-_second_release_-_refresh_2的救赎

    起源 Multitouch是一款可用于Win7模拟触摸屏幕的开源软件(关于它的使用介绍),最后一次更新是在11年5月份,我是13年初开始用的,当时开发了一款类似IPhone相册的图片展示触控程序,就是 ...

  8. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  9. 3D触控简介:建立数字刻度应用及快速活动栏

    苹果公司通过 iPhone 6s 和 6s Plus 引入了与手机互动的全新方式:按压手势.你也许知道,苹果智能手表和苹果笔记本电脑早已具备这一功能,只是名称略有不同,为力感触控(Force Touc ...

随机推荐

  1. asp.net权限认证篇外:集成域账号登录

    在之前的我们已经讲过asp.net权限认证:Windows认证,现在我们来讲讲域账号登录, 这不是同一件事哦,windows认证更多的是对资源访问的一种权限管控,而域账号登录更多的是针对用户登录的认证 ...

  2. java_XML_JAXB

    JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal. 下面使用的是JDK ...

  3. 763A - Timofey and a tree

    A. Timofey and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  4. ASP.NET给前端动态添加修改 CSS样式JS 标题 关键字

    有很多网站读者能换自己喜欢的样式,还有一些网站想多站点共享后端代码而只动前段样式,可以采用动态替换CSS样式和JS. 如果是webform 开发,可以用下列方法: 流程是首先从数据中或者xml读取数据 ...

  5. 初识Jenkins

    近期,接手了一个活,我要搭一个Jenkins持续集成的平台,所以,就把这次工作的收获分享给大家了. Jenkins是什么 Jenkins插件配置 Jenkins怎么用 新建job 系统配置 添加用户 ...

  6. 模仿jquery的fileupload插件

    仅需要new一个对象,将上传后台的url和点击触发上传的元素id传给对象,就可以自从实现上传 暂不支持IE <html> <body> <a href="#&q ...

  7. orcale 之 SQL 语言基础

    SQL 全称是结构化查询语句(Structure Query Language),是数据库操作的国际化语言,对所有的数据库产品都要支持. SQL 语言的分类 我们按照其功能可以大致分为四类: 数据定义 ...

  8. 《半吊子全栈系列:Boostrap3》

    前言:后端开发做网站 几年前,作为一名纯粹后端Java开发人员,对JS还没开窍,对于页面只停留在<十天学会DIV+CSS>这种程度,但是我又想做网站怎么办? 这时候Boostrap3出现了 ...

  9. JavaScript中国象棋程序(1) - 界面设计

    "JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第1节. 这一系列共有9个部分: 0.JavaScript中国象 ...

  10. Unity 碰撞器和触发器的理解

    要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...