原文出自: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. css3绘制腾讯logo

    CSS3绘制的腾讯LOGO,下边是对比图. 演示地址

  2. 基于canvas和jsp的头像剪辑上传

    最近在做项目时候需要一个头像长传功能,但是现在照片动不动就几兆的,都是流量的浪费. 我只是简单想要上传一个头像而已... 经过几天发愤图强..总算是略有所获.. 基本思路: 1.html部分,图片剪辑 ...

  3. MongoDB学习总结(四) —— 索引的基本用法

    说到索引,大家肯定都在关系型数据库或多或少接触过,它的主要目的是加速查询的速度.MongoDB作为一种数据库,当然也提供了索引的操作. 我们先插入1万条测试数据. 首先,我们先来看看不加索引查找nam ...

  4. PHPCMS 概念初学

    CMS是一个内容管理系统,主要是用来做企业站,也就是说我们在网上见到绝大部分的企业站都是用这个做的,有极少数的是用源生代码写的 如何安装? 1.从网站搜索下载安装包并解压 2.点击文件夹后显示一下两个 ...

  5. 特性Attribute 的使用

    [IdentityAuthorize]           public ActionResult Index()        {             return View("~/V ...

  6. CSS之浏览器默认样式设置

    今天自己写css样式时,其中用到了<ul>标签,设置了一系列效果后运行,发现位置与设置有出入.chrome上打开检查项,发现<ul>标签的styles底部多了以下一段: ul, ...

  7. int与integer的区别(基本数据类型与引用数据类型)

    一.先说说int与integer的区别 int 是基本数据类型,默认值为0,不需要进行实例化 integer 是引用数据类型,是int的封装类型,默认值为null,创建该类型需要进行实例化. 基本数据 ...

  8. Java Web(七) JSTL标签库

    在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为.行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它 ...

  9. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  10. 实际情况来看,还是yield很爽

    0 引言 最近公司有一个 php 的项目,要 port 到 node.js 来.我之前没有接触过这个项目,整个项目使用的是 yaf 框架.整个项目流程是调用服务端的业务数据,然后拼装数据,返回给前端: ...