windows phone 8.1开发:触控和指针事件1
原文出自: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的更多相关文章
- Windows Phone 8.1开发:触控和指针事件2
原文出自:http://www.bcmeng.com/windows-phone-touch1/ 请在此输入内容(想死啊,写了一个小时,直接没保存不小心删掉了.那就简单说说吧)Pointer事件有以下 ...
- Windows 8.1 应用开发 – 触控操作
与WPF相同Windows 8.1应用中也具有高级触控操作(Manipulation),其中包含了三种常见的触屏手势:平移.缩放.旋转,通过以下四种事件可为控件实现各种触控操作:Manipulatio ...
- c# 开发ActiveX控件,添加事件,QT调用事件
c# 开发 ActiveX 的过程参考我的另一篇文章 : https://www.cnblogs.com/baqifanye/p/10414004.html 本篇讲如何 在C# 开发的ActiveX ...
- Windows phone 8 学习笔记(1) 触控输入(转)
Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此在输入方式上引入一套全新的触控操作方式,我们需要重新定义相关的事 ...
- Windows phone 8 学习笔记(1) 触控输入
原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...
- 安卓Tv开发(一)移动智能电视之焦点控制(触控事件)
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验风格上有很大的区别,本系列博 ...
- WPF触控程序开发(四)——MultiTouchVista_-_second_release_-_refresh_2的救赎
起源 Multitouch是一款可用于Win7模拟触摸屏幕的开源软件(关于它的使用介绍),最后一次更新是在11年5月份,我是13年初开始用的,当时开发了一款类似IPhone相册的图片展示触控程序,就是 ...
- MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件
原文 MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...
- 3D触控简介:建立数字刻度应用及快速活动栏
苹果公司通过 iPhone 6s 和 6s Plus 引入了与手机互动的全新方式:按压手势.你也许知道,苹果智能手表和苹果笔记本电脑早已具备这一功能,只是名称略有不同,为力感触控(Force Touc ...
随机推荐
- [html] 学习笔记--Web存储
HTML5 提供了两种在客户端存储数据的新方法之前,这些都是由 cookie 完成的.但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效 ...
- samentic 在IE9 不支持 transition 的解决方案
本文原文链接为:http://www.cnblogs.com/jying/p/6377696.html ,转载请注明出处. 在使用samentic过程中遇到 IE9 下报如下错误: 查阅了好多资料终 ...
- java中的final与static
许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...
- 报表学习总结(一)——ASP.NET 水晶报表(Crystal Reports)的简单使用
一.水晶报表简介 Crystal Reports(水晶报表)是一款商务智能(BI)软件,主要用于设计及产生报表.水晶报表是业内最专业.功能最强的报表系统,它除了强大的报表功能外.最大的优势是实现了与绝 ...
- 二维码 iOS
一:生成二维码 1.根据一个字符串生成一个二维码 根据 #import <CoreImage/CoreImage.h>这个框架写的 在按钮的点击事件写 @interface ViewCo ...
- Android jni 编程4(对基本类型二维整型数组的操作)
Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...
- java集合框架02——Collection架构与源码分析
Collection是一个接口,它主要的两个分支是List和Set.如下图所示: List和Set都是接口,它们继承与Collection.List是有序的队列,可以用重复的元素:而Set是数学概念中 ...
- 警惕Dictionary和SortedDictionary的顺序陷阱
/*我们查询资料得知Dictionary的遍历顺序和添加Add时的顺序是一致的,不像 HashTable 顺序不可知;于是我要依赖Dictionary的这种顺序一致特性做一个,固定大小400长度的队列 ...
- html5表单和伪类
type = "email"; 自带验证格式type = "url"; 网址 http//:type = "tel";移动端会变成数字键盘t ...
- Ext Js详解指南
什么是Ext JS 走进Ext的世界 Ext JS是一款富客户端开发框架它基于javascript.HTML和CSS开发而成,无需安装任何插件即可在常用浏览器中创建出绚丽的页面效果. 个人总结Ext ...