Windows 10 开发日记(二)-- 手势顺序调研

前文再续,书接上一回。

上回说到Windows10手势分为高中低三个档次,于是心血来潮想要研究一下这三个等级的操作顺序是如何的?Manipulation手势的几个事件的触发顺序又是怎么样的,什么时候触发Starting,什么时候触发Started?UserControl自身有一个虚方法:OnManipulationStarting,OnManipulationStarted,它同时又有ManipulationStarted,ManipulationStarted事件,为什么功能类似的东西要有不同的方式,他们的触发顺序是什么?于是这些问题就构成了今天的这篇文章。

简单地来说,这篇文章是为了解决以下的几个问题:

1. PointerPressed,ManipulationStarting,Tapped事件的触发顺序

2. UserControl的重写方法:MainPage_ManipulationStarting(), MainPage_ManipulationStarted() 与UserControl的ManipulationStarting,ManipulationStarted事件的注册方法的执行顺序

3. ManipulationStarting、ManipulationStarted的触发条件。



 第一个问题:

这个只需要写个比较简单的Demo,就可以把这个顺序找出来:PointerPressed会先被触发,ManipulationStarting次之,只有手指或者鼠标放开的时候才会触发Tapped事件。关于Tapped事件值得一说的是:MSDN给出的解释是:因为有其他手收例如Holding,在手指按下的时候,你是不能确定是什么事件会被触发的,只有手指松开之后,才会根据相应的条件判断到底是什么事件。

从结果上来看,PointerPressed事件会被首先触发,有点出乎我的意料,因为MSDN上给出的ManipulationStarting的解释是:这个时间会启动Manipulation Processor,看来这个意思是这个Manipulation Processor是监控Manipulation 系列事件的。

毕竟PointerPressed与ManipulationStarting都是属于Framwork层的时间,应该是框架决定的这个顺序。

但是这三个事件是平行的事件,即,不论哪个事件被标记为处理过,即e.Handled = true,都不会影响其他两个事件,而只会影响事件不会继续路由下去。

第二个问题:

     研究这个问题是出于我的好奇心,同样作用的东西,为什么要有两种形式?说实话,我不知道为什么,MSDN好像也没有给出一个明确的答案,它只是说,OnManipulationStarting represents a prewired event handler for the UIElement.ManipulationStarting event.这个重载方法会在事件之前被调用,而且这个方法在其他所有Manipulation事件触发之前执行,这样你就可以通过控制event Data来控制手势事件的路由了。

还是没说为什么要有这个方法。。。

但是这解决了第二个问题的第二个问题,执行顺序的问题,重写方法会首先执行,然后才是控件的相应事件被触发,不仅仅是Starting哦,你如果不信,可以去试试,Delta,Completed都是一样的。

第三个问题:

      之前有个同事问我,Win10上怎么在手点击在屏幕上就能捕获这个事件,并且获得这个点,感觉ManipulationStarted事件不是很灵敏啊。确实不敏感,我决定先从ManipulationStarted事件说起:ManipulationStarted represents that the manipulation recognition logic has detected pointer movement. 。看到没有:检测到移动,就是说,必须要移动一下,才会触发这个事件。

但是PC与Phone又有不一致的情况:PC上使用鼠标,按下之后不动,也会触发ManipulationStarted事件,同样的,Phone上就不会,你必须按下后稍微移动一下,才会触发ManipulationStarted事件。此处有很多点,如果知道答案的朋友可以告诉我

OK,说回ManipulationStarting:Occurs when the manipulation processor is first created.就是说这个事件会触发操作处理器被调起,并且监控触发后续的事件。通俗点就是:当你手指点下,这个事件就会被触发,这个事件就能解答同事的疑惑了。

我知道很多朋友是带着上一章的疑问来看这一章的,不好意思发散了一下,答案马上解答。

时间: 2024-10-10 15:26:26

Windows 10 开发日记(二)-- 手势顺序调研的相关文章

Windows 10 开发日记(三)-- 如何在手势开始之前判断手指数量

这是我们在实际项目中经常要面临的问题,因为你很可能会出现这种需求:单手操作与双手操作的行为不同,在手势开始之时就需要知道到底是单手还是双手. 方案一:   了解了这个需求之后,我迅速凭借经验,感觉在ManipulationStarting或者ManipulationStarted事件传入的参数中应该类似于e.GetPointers()类似的方法,用于获得当前有多少个手指在屏幕上.感觉三年的Windows 开发经验终于有了点小用,节省了我好多效率不免心生有预感...但是当寻找了半天之后,胸中顿时有

Windows 10 开发日记(五)-- 当Binding遇到异步 -- 解决方案

前文再续,上一章提出了问题,本章提出了三种解决方案: 解决方案一:手动进行异步转换,核心思想:将binding做的事情放入CodeBehind FilterItemControl.XAML: <Grid> <Image x:Name="FilterImage" Stretch="UniformToFill"/> <Grid VerticalAlignment="Bottom" Height="20"

Windows 10 开发日记(四)-- 当Binding遇到异步 -- 问题的引出

Binding之于MVVM来说的重要性无需多说,Binding之于DataTemplate来说的重要性也无需多说,Binding的重要性也无需多说,异步也不用多说了,今天就到此为止吧... -------------------------------------------------冷冷的分割线------------------------------------------------------ 但是,当你要binding的数据是一个需要异步操作的结果的时候呢? 这是我们在项目中遇到的

Windows移动开发(二)——闭关修炼

一些武侠小说里的大人物,为了争夺武林盟主,号召天下,常常闭关修炼一段时间,闭关期间仅仅能接触送饭的人,而且关外还有非常多守卫的人员.还有,不管是篮球还是足球运动员,他们在真正接触球之前,都必须做非常长一段时间的身体素养锻炼,像长跑之类. 假设我们想成为程序界的武林至尊,那么我们也必须得闭关修炼,细致修炼基本功. 那么我们做Windows移动开发的程序猿们的基本功是什么呢?事实上,基本功有非常多,最重要的是逻辑思维和解决这个问题的能力,话又说回来,逻辑思维和解决这个问题的能力从何而来呢?不断的做.

Windows驱动开发(二)

本节主要介绍驱动开发的一些基础知识. 1. 驱动程序的基本组成 1.1. 最经常见到的数据结构 a. DRIVER_OBJECT驱动对象 [cpp] view plaincopy // WDK中对驱动对象的定义 // 每个驱动程序都会有一个唯一的驱动对象与之对应 // 它是在驱动加载时被内核对象管理程序创建的 typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following links all of the

C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载

基于Windows驱动开发技术详解这本书 一.简单的INF文件剖析 INF文件是一个文本文件,由若干个节(Section)组成.每个节的名称用一个方括号指示,紧接着方括号后面的就是节内容.每一行就是一项内容,其形式都是类似SomeEntry=SomwValue.每个项的顺序是可以颠倒的,但系统分析INF文件的时候,是顺序解析的.INF中注释语句是用分号开头的. 二.WDM设备安装在注册表中的变化 WDM式驱动程序的安装会在三个方面修改注册表,分别是硬件子键(Hardware).类子键(Class

Windows 10开发基础——XML和JSON (二)

主要内容: Linq to XML Newtonsoft.Json.Linq来解析JSON 博客园RSS(http://www.cnblogs.com/rss)的解析 UWP调用自己实现的Web API 1.Linq to XML     Linq to XML不是一个新鲜的话题了,网上以及各种资料对这个介绍都比较多.今天就简单了解下,不做深入的研究...在代码中生成XML文档,使用Linq to XML会比Windows.Data.Xml.Dom命名空间下的类简单,使用起来也更加灵活.Linq

Windows 10开发基础——文件、文件夹和库(二)

主要内容: 使用选取器打开和保存文件 关于文件.文件夹和库,如果深究其实还是有比较多的内容,我们这一次来学习一下选取器就收了.还有上篇博文中读写文本文件的三种方式可以细细体会一下. 文件选取器包含文件打开选取器(FileOpenPicker.FolderPicker)和文件保存选取器(FileSavePicker),分别用来打开文件和保存文件,这两个选取器的使用方法大致相同. FileOpenPicker类: ViewMode ,获取或设置文件选取器用来展示文件或文件夹的视图模式,属性值由Pic

Windows 10开发基础——文件、文件夹和库(一)

主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和文件夹 先了解一下文件查询的几个方法: StorageFolder.GetFilesAsync: 获取当前文件夹中的所有文件,返回一个 IReadOnlyList<StorageFile>集合 IReadOnlyList<StorageFile> fileList =await picturesFolder.GetFilesAsync(); StorageFol