快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)

原文 http://technet.microsoft.com/zh-cn/subscriptions/hh465387

快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)

 

Windows 8 设备通常具有多点触摸屏幕,从而用户可以同时使用多个手指来进行不同的输入交互,如点击、拖动或收缩。Windows 运行时具有多种处理触控输入的不同机制,从而你可以创建用户能够放心浏览的沉浸式体验。 本快速入门包含在采用 C++、C# 或 Visual Basic 的 Windows 应用商店应用中使用触控输入的基本知识。有关更多的代码示例,请参阅输入示例

路线图: 本主题与其他主题有何关联?请参阅:

先决条件

本主题假定你可以使用 C++、C# 或 Visual Basic 创建基本的 Windows 应用商店应用。有关创建你的第一个 Windows 应用商店应用的说明,请参阅使用 C++、C# 或 Visual Basic 创建你的第一个 Windows 应用商店应用

用户体验指南(最佳实践)

尽管本主题包含触摸实现的某些基本知识,但对于特定的触摸方案,你还应该记住很多用户体验指南。请参阅以下内容获取详细信息:

触控输入简介

很多 Windows 8 设备都使用触摸作为主要用户输入。Windows 8 支持多点触摸屏幕,从而用户可以使用自然交互与设备进行交互。向应用中添加触摸和交互支持可以大大改进用户体验。但是,你应该仔细设计触摸支持,以确保你 的用户可以放心浏览你的应用。此外,尽管进行了触摸优化,你还必须确保你的应用能够适应传统的鼠标和键盘输入。

你可以使用多种不同的方法在使用 C++、C# 或 Visual Basic 的 Windows 应用商店应用中处理触摸输入。 内置的控件库提供使用标准交互、动画物理效果以及视觉反馈的默认触摸、鼠标和键盘支持。

如果你不需要自定义的触摸支持,则可以使用该框架提供的触摸支持并遵循触摸优化的几个简单准则,如本快速入门指南的后面部分所述。

你可以实现自己的触摸和交互支持,但要记住,用户期望获得直观的体验,包括直接与应用的元素交互。 你应该在内置支持上建立自定义触摸支持的模型,以便使内容简单,而且更容易发现。此外,你还应该为所有交互提供即时视觉反馈,以避免用户不确定性并鼓励用户探究。

若要提供自定义触摸支持,则可以处理分组到三个不同抽象级别的 UIElement 事件。高级事件(如 Tapped)可用于响应简单交互。指针事件提供较低级别的详细信息,如指针动作以及区分按压和释放手势。操作事件提供较低级别的详细信息,如手势速度和延迟以及多点触摸数据。这些事件自动支持触摸和鼠标输入,但必要时也提供信息以便让你区分实际输入设备。

手势

手势是将触摸输入数据解释为一组常见运动(如点击、滑动和收缩)的高级方法。Windows 8 中使用的常见手势包括:

交互 描述
点击 用一个手指触摸屏幕,然后抬起手指。
长按 用一个手指触摸屏幕并保持不动。
滑动 用一个或多个手指触摸屏幕并向着同一方向移动。
轻扫 用一个或多个手指触摸屏幕并向着同一方向移动较短距离。
收缩 用两个或多个手指触摸屏幕,然后将手指并拢在一起或分开。
旋转 用两个或多个手指触摸屏幕并沿着顺时针或逆时针的弧线移动。
拉伸 用两个或多个手指触摸屏幕,然后将手指分开。

 

你可以通过处理较高级别的事件(如 TappedDoubleTappedRightTappedHolding)来响应简单的触摸和鼠标手势。你也可以将 IsTapEnabledIsDoubleTapEnabledIsRightTapEnabledIsHoldingEnabled 设置为 false,以便为特定元素禁用这些手势。

指针事件(如 PointerMoved)可用于支持一个手指的简单交互,如滑动。

对于多点触摸交互(例如收缩)和使用惯性和速度数据的交互(例如拖动),需要使用操作事件。操作事件提供信息的形式并不是要执行的交互,而是触摸数据(例如位置、转换三角和速度)。你可以使用此触摸数据来确定要执行的交互类型。但是,你需要将该信息转换成等效的交互。

使用指针事件

指针事件自动支持触摸和鼠标输入,并替换更多的传统鼠标事件。

基于触摸的指针事件仅限于一个手指的交互,如点击和滑动,并且它们不支持基于速度的交互。屏幕上一个手指的触摸会转换为同等的 Windows 运行时指针事件,如将手指放在屏幕上时的 PointerPressed、抬起手指时的 PointerReleased 以及在屏幕上拖动手指时的 PointerMoved。使用 C++、C# 或 Visual Basic 的 Windows 应用商店应用使用的其他指针事件为 PointerExitedPointerEntered。指针事件的事件参数为 PointerRoutedEventArgs

以下示例显示如何使用 PointerPressedPointerReleasedPointerExited 事件来处理 Rectangle 对象上的点击交互。

首先,采用 XAML 创建名为 TestRectangleRectangle 并为 PointerPressedPointerReleasedPointerExited 事件添加事件处理程序。

XAML

<Rectangle Name="TestRectangle"
  Height="100" Width="200" Fill="Blue"
  PointerPressed="TestRectangle_PointerPressed"
  PointerReleased="TestRectangle_PointerReleased"
  PointerExited="TestRectangle_PointerExited" />

接下来,创建指针事件的事件处理程序。PointerPressed 事件处理程序增加 RectangleHeightWidthPointerReleased 事件处理程序将 HeightWidth 重新设置为起始值。最后,PointerExited 事件处理程序还将 HeightWidth 重新设置为起始值。

VB

C#

C++

F#

JScript

PowerShell

Private Sub TestRectangle_PointerPressed(ByVal sender As Object,
    ByVal e As PointerRoutedEventArgs)

    Dim rect As Rectangle = CType(sender,Rectangle)

    ' Change the size of the Rectangle.
    If (Not (rect) Is Nothing) Then
        rect.Width = 250
        rect.Height = 150
    End If

End Sub

Private Sub TestRectangle_PointerReleased(ByVal sender As Object,
    ByVal e As PointerRoutedEventArgs)

    Dim rect As Rectangle = CType(sender,Rectangle)

    ' Reset the dimensions on the Rectangle.
    If ((rect) IsNot Nothing) Then
        rect.Width = 200
        rect.Height = 100
    End If

End Sub

Private Sub TestRectangle_PointerExited(ByVal sender As Object,
    ByVal e As PointerRoutedEventArgs)

    Dim rect As Rectangle = CType(sender,Rectangle)

    ' Finger moved out of Rectangle before the pointer exited event.
    ' Reset the dimensions on the Rectangle.
    If (Not (rect) Is Nothing) Then
        rect.Width = 200
        rect.Height = 100
    End If

End Sub

使用操作事件

如果你需要在应用中支持多个手指交互或使用速度数据的交互,则需要使用操作事件。你可以操作事件来检测诸如拖动、收缩和按住之类的交互。下表列出了使用 C++、C# 或 Visual Basic 的 Windows 应用商店应用中的操作事件和类。

事件或类 描述
ManipulationStarting event 首次创建操作处理器时发生。
ManipulationStarted event 当输入设备在 UIElement 上开始操作时发生。
ManipulationDelta event 当输入设备在操作期间更改位置时发生。
ManipulationInertiaStarting 在操作过程中,当延迟开始时,如果输入设备与 UIElement 对象失去联系,则会发生。
ManipulationCompleted event UIElement 上的操作和延迟完成时发生。
ManipulationStartingRoutedEventArgs 提供 ManipulationStarting 事件的数据。
ManipulationStartedRoutedEventArgs 提供 ManipulationStarted 事件的数据。
ManipulationDeltaRoutedEventArgs 提供 ManipulationDelta 事件的数据。
ManipulationInertiaStartingRoutedEventArgs 提供 ManipulationInertiaStarting 事件的数据。
ManipulationVelocities 描述操作发生的速度。
ManipulationCompletedRoutedEventArgs 提供 ManipulationCompleted 事件的数据。

 

使用 C++、C# 或 Visual Basic 的 Windows 应用商店应用中的手势由一系列操作事件组成。每个手势都从 ManipulationStarted 事件开始,如用户触摸屏幕时。接下来,引发一个或多个 ManipulationDelta 事件。例如,如果触摸屏幕,然后在屏幕上拖动手指,则会引发多个 ManipulationDelta 事件。最后,完成交互时引发 ManipulationCompleted 事件。

Note  如果你没有触摸屏监视器,则可以使用鼠标和鼠标滚轮界面在模拟器中测试你的操作事件代码。

以下示例显示如何使用 ManipulationDelta 事件来处理拖动交互。该示例创建可以在屏幕上拖动的 Rectangle

首先,采用 XAML 格式创建一个名为 TestRectangleRectangle,其中包含 200 个 HeightWidth

XAML

<Rectangle Name="TestRectangle"
  Width="200" Height="200" Fill="Blue"
  ManipulationMode="All"/>

接下来,创建一个名为 dragTranslation 的全局 TranslateTransform,用于转换 Rectangle。向 Rectangle 中添加一个事件处理程序,以处理 ManipulationDelta 事件,并向 RectangleRenderTransform 中添加 dragTranslation。最后,在 ManipulationDelta 事件处理程序中,使用 Delta 属性上的 TranslateTransform 更新 Rectangle 的位置。

VB

C#

C++

F#

JScript

PowerShell

' Global Transform used to change the position of the Rectangle.
Dim dragTranslation As TranslateTransform

' Constructor
Public Sub New()

    InitializeComponent()

    ' Add handler for the ManipulationDelta event
    AddHandler TestRectangle.ManipulationDelta,
        AddressOf Me.Drag_ManipulationDelta
    dragTranslation = New TranslateTransform
    TestRectangle.RenderTransform = Me.dragTranslation

End Sub

Private Sub Drag_ManipulationDelta(ByVal sender As Object,
    ByVal e As ManipulationDeltaRoutedEventArgs)

    ' Move the rectangle.
    dragTranslation.X = (dragTranslation.X + e.Delta.Translation.X)
    dragTranslation.Y = (dragTranslation.Y + e.Delta.Translation.Y)

End Sub

UI 设计和触控输入

设计用户界面的方法可影响通过触控输入使用应用的难易程度。为了确保你的应用经过了触摸优化,请遵循下列指南:

  • 请务必调整鼠标指针和指尖之间的大小差异。触摸要求更大的 UI 元素以确保准确性,并防止手指遮住重要的信息。
  • 请始终为触摸交互提供即时、直接的视觉反馈。例如,你可以使用突出显示或工具提示来指示当前的触摸目标,防止意外激活其他目标。
  • 使用各种物理效果,如加速和惯性来在交互(如移动)中提供自然的感觉。
  • 使用捕捉点和其他限制来帮助将用户引导到最有用的状态。

有关与触摸相关的其他用户体验设计指南,请参阅用户交互指南

时间: 2013-07-20

快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)的相关文章

Spread for Windows Forms快速入门(15)---使用 Spread 设计器

通过 Spread 设计器用户可以快速地对 Spread 控件进行设计.无论用户是正在做一个关于 Spread 控件特性的原型研究,还是对于一个已经存在的 Spread 控件在某些方面进行进一步的定制,Spread 设计器专有的图形界面可节省大量的时间和精力.Spread 设计器允许用户添加数据,同时设置控件属性,而且还包括那些在 Visual Studio 中无法设置的属性.用户可以同时设置运行时和设计时属性,大多数情况下用户可以在应用设置之前预览效果,设置完成后,就可以将所有的设置应用到 S

Spread for Windows Forms快速入门(16)---用Spread设计器创建和编辑图表

Spread支持85种丰富多彩的图表效果.可以在Spread设计器中基于工作表的数据直接生成图表,操作简单.同时,软件人员还可以在Visual Studio设计环境中定制图表的所有元素,包括标题.序列.轴.样式.图例等.这一篇介绍如何用Spread设计器创建和编辑图表. 准备图表的数据 首先要启动Spread设计器.你可以在 Visual Studio .NET 中鼠标右键点击 Spread 控件,在弹出菜单中选择 Spread 设计器:也可以在安装菜单中启动独立运行的Spread 设计器. 在

Spread for Windows Forms快速入门(2)---设置Spread表单

让我们从设置Spread的大小和表单的外观开始学习如何定制Spread,这些操作通常放在Form的构造函数中进行,在InitializeComponent()之后调用.   自定义控件的大小 你可以设置Spread控件的规格,这决定了表单中可见的区域的大小.下面的图片中展示了你可以设置的规格,通过设置每一个规格中像素的数量进行设置.   计算Spread控件的高度时,假设滚动条是关闭状态,没有标题,计算所有行的高度以及每一个边界按1个像素计算,所以,如果现在有10行,每行20像素高度,总的高度为

Spread for Windows Forms快速入门(11)---数据筛选

Spread支持开发人员自定义筛选数据的用户体验.基于行数据筛选,你可以允许用户分列进行筛选,从而仅显示符合了下拉列表中条件的行的数据,或者根据筛选结果更改行的外观.你可以使用默认的筛选方式,或者你可以从实际出发,自定义筛选器的每一个方面. 允许用户进行行筛选 默认情况下,表单禁止用户对表单的行进行筛选.你可以开启这一特性, 允许用户在所有列或者指定的列中进行行筛选.根据你要隐藏被筛除的列,还是更改列的外观,分别使用HideRowFilter类或StyleRowFilter类. 使用列Allow

Spread for Windows Forms快速入门(14)---文件操作

你可以将数据从Spread中存到几种不同类型的文件中或者可以在Spread中打开几种不同类型的数据文件.通过使用相应的代码,你可以将整个控件,某个特定的表单,或者某个特定单元格区域中的数据保存为几种不同的文件类型或者流.类似的,你可以允许用户对某几种文件类型进行文件操作. 保存到Excel文件 你可以使用ExcelSaveFlags枚举类型的UseOOXMLFormat选项,将数据保存到Excel格式文件(BIFF8 格式)或者Excel 2007 XML 格式(xlsx).默认的,当你保存为E

走近VB.Net(十二) 注册表快速入门

快速入门|注册表 走近VB.Net(十二) 注册表快速入门 作者:hejianzhong VB.Net中文站(http://vbnetcn.126.com) 首先介绍一下注册表的相关基础知识:注册表的每一个文件夹被称为一个Key(项),这个文件夹的子文件夹被称为SubKey(子项),而在一个子项中有不同的Value Name(值项-即数值顶),值项后面就是你要保存的数据Value Data(数据)了.而在子项中通常都有一个Default Value 是默认的Value Name,相信打开过注册表

ASP.NET数据库编程快速入门之技术慨述

asp.net|编程|快速入门|数据|数据库 大约有将近一百万名开发人员使用了.NET Framework的第一个版本来开发网站.所以在2003年的夏天,当从Microsoft传出将有新版本发布的传闻时,许多人的耳朵都竖了起来,这个新的版本将使得创建ASP.NET页面所需的代码行数减少70%.像这样大规模的提高生产效率在程序设计中是不多见的.当ASP.NET 2.0的代码样例在2003年秋的Microsoft专业开发人员大会(Microsoft Professional Developer's

.NET之ASP Web Application快速入门(3)(转载)

application|web|快速入门 文件Global.asax 除了编写UI(Use Interface:用户界面)以外,我们还可以在Web Application中添加"application"级别的控制逻辑代码以及事件触发程序.这些代码不会去操作产生UI,并且基本上不会响应于单独的页面请求,它们负责的是处理高级别的application事件,包括Application_Start.Application_End.Session_Start和Session_End.这些控制逻辑

《iOS9开发快速入门》——第1章,第1.3节编写第一个iOS 9应用

1.3 编写第一个iOS 9应用 iOS9开发快速入门 在Xcode 7.0安装好后,就可以在Xcode 7.0中编写iOS 9应用程序了.本节将主要讲解Xcode 7.0的项目创建.编辑.连接.运行.iOS模拟器介绍.编辑界面等相关方面的内容. 1.3.1 创建项目 一个iOS应用的所有文件都在Xcode项目下,项目可以帮助用户管理代码文件和资源文件.以下将主要讲解何如在Xcode 7.0中创建一个名为Hello的项目. (1)单击打开Xcode 7.0,弹出一个Welcome to Xcod