前言
当前在进行桌面开发时,为了适应更多应用场景,往往会要求应用支持触摸屏。相对于传统的键鼠操作而言,触控操作在硬件支持的情况下,更加简单易用,这也就要求开发人员对触控交互有更深入的了解。
基础手势操作介绍
操作名称 | 操作英文名 | Type | 涉及事件 | 描述 |
---|---|---|---|---|
点击 | Tap | 静态手势 | DoubleTapped、 RightTapped、 Tappped、PointerPressed、PointerReleased、 | 一根手指触摸屏幕并抬起。 |
长按 | Press and Hold | 静态手势 | 一根手指触摸屏幕并保持原位。 | |
滑动 | Slide | 操作手势 | ManipulationStarting、ManipulationStarted、ManipulationDelta、ManipulationInertiaStarting、ManipulationCompleted ManipulationMode设置必须含有TranslateX或TranslateRailsX或TranslateY或TranslateRailsY | 一根或多根手指触摸屏幕并朝同一方向移动。一般为点上操作对象,进行拖动。 |
轻扫 | Swipe | 操作手势 | 事件同Slide; ManipulationMode设置必须含有TranslateX或TranslateRailsX或TranslateY或TranslateRailsY | 一根或多根手指触摸屏幕并朝同一方向移动一小段距离。一般为 |
旋转 | Rotate | 操作手势 | 事件同Slide; ManipulationMode设置必须含有Rotate或RotateInertia | 两根或多根手指触摸屏幕,并沿顺时针或逆时针弧线移动。 |
捏放 | Pinch | 操作手势 | 事件同Slide; ManipulationMode设置必须含有Scale(Scale<1时为缩小) | 两根或多根手指触摸屏幕并缩小手指间距。 |
拉伸/放大 | Stretch/Zoom | 操作手势 | 事件同Slide; ManipulationMode设置必须含有Scale(Scale>1时为放大) | 两根或多根手指触摸屏幕并增大手指间距。 |
注:捏放与放大,在触控操作中一般叫Pinch-Zoom;ManipulationMode的默认设置为System。
单指操作与多指操作
从基础手势操作表中看出,触控操作方式明显分为了单指操作与多指操作。
单指——使用指针事件
对于单指手势的触控操作,MS推荐使用Pointer相关事件(指针事件基于单一输入点(手指、笔尖、鼠标光标),不支持基于速度的交互。):
事件 | 说明 |
---|---|
在指针由平台取消时发生。 在以下条件下,可能会发生这种情况:
| |
当另一个 UI 元素捕获该指针、释放该指针、或以编程方式捕获另一个指针时发生。 注意:不存在相应的指针捕获事件。 | |
在指针进入元素的边界区域时发生。 对于触摸、触摸板、鼠标和笔输入,可能会以略有不同的方式发生此情况。
| |
在指针离开元素的边界区域时发生。 对于触摸、触摸板、鼠标和笔输入,可能会以略有不同的方式发生此情况。
| |
在指针更改元素的绑定区域内的坐标、按钮状态、压力、倾斜或接触几何图形(例如宽度和高度)时发生。 对于触摸、触摸板、鼠标和笔输入,可能会以略有不同的方式发生此情况。
| |
在指针指示元素的绑定区域内发生按下操作(例如触摸按下、鼠标按钮按下、笔按下或触摸板按钮按下)时发生。 必须从处理程序中对此事件调用 CapturePointer。 | |
在指针指示元素的绑定区域内发生释放事件(例如触摸抬起、鼠标按钮抬起、笔抬起或触摸板按钮抬起)时或在绑定区域外捕获到该指针时发生。 | |
在鼠标滚轮转动时发生。 鼠标输入与第一次检测到鼠标输入时分配的单个指针相关联。 单击鼠标按钮(左键、滚轮或右键)会通过 PointerMoved 事件在指针和该按钮之间创建一个辅助关联。 |
多指——操作事件
如果需要支持多个手指交互或要求使用速率数据的交互,请在应用中使用操作事件。
可以使用操作事件来检测拖移、缩放和法定保留等交互。
事件或类 | 说明 |
---|---|
ManipulationStarting 事件 | 首次创建操作处理器时发生。 |
ManipulationStarted 事件 | 在输入设备开始操作 UIElement 时发生。 |
ManipulationDelta 事件 | 输入设备在操作过程中更改位置时发生。 |
ManipulationInertiaStarting 事件 | 输入设备在操作和惯性开始期间失去与 UIElement 对象的交互时发生。 |
ManipulationCompleted 事件 | 在 UIElement 上的操作和惯性完成时发生。 |
ManipulationStartingRoutedEventArgs | 提供 ManipulationStarting 事件的数据。 |
ManipulationStartedRoutedEventArgs | 提供 ManipulationStarted 事件的数据。 |
ManipulationDeltaRoutedEventArgs | 提供 ManipulationDelta 事件的数据。 |
ManipulationInertiaStartingRoutedEventArgs | 提供 ManipulationInertiaStarting 事件的数据。 |
ManipulationVelocities | 描述操作发生时的速度。 |
ManipulationCompletedRoutedEventArgs | 提供 ManipulationCompleted 事件的数据。 |
手势识别器——GestureRecognizer
对于多指操作,除了使用ManipulationMode进行相应的设置以指定接受指定的手势外,还可以通过设置手势识别器的GestureSettings属性进行识别。详细的使用方式见GestureRecognizer Class (Windows.UI.Input) - Windows UWP applications | Microsoft Learn