WINUI——触控操作小结

前言

当前在进行桌面开发时,为了适应更多应用场景,往往会要求应用支持触摸屏。相对于传统的键鼠操作而言,触控操作在硬件支持的情况下,更加简单易用,这也就要求开发人员对触控交互有更深入的了解。

基础手势操作介绍

操作名称操作英文名Type涉及事件描述
点击Tap静态手势DoubleTapped、 RightTapped、 TapppedPointerPressedPointerReleased一根手指触摸屏幕并抬起。
长按Press and Hold静态手势

  HoldingPointerPressedPointerReleased

一根手指触摸屏幕并保持原位。
滑动Slide操作手势

ManipulationStartingManipulationStartedManipulationDeltaManipulationInertiaStartingManipulationCompleted

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相关事件(指针事件基于单一输入点(手指、笔尖、鼠标光标),不支持基于速度的交互。):

事件说明

PointerCanceled

在指针由平台取消时发生。 在以下条件下,可能会发生这种情况:

  • 当在输入图面的范围内检测到笔时,将取消触控指针。
  • 超过 100 毫秒未检测到活动的接触点。
  • 监视器/显示器已更改(分辨率、设置、多监视器配置)。
  • 桌面已锁定或用户已注销。
  • 同时接触点的数量超出了设备所支持的数量。

PointerCaptureLost

当另一个 UI 元素捕获该指针、释放该指针、或以编程方式捕获另一个指针时发生。

注意:不存在相应的指针捕获事件。

PointerEntered

在指针进入元素的边界区域时发生。 对于触摸、触摸板、鼠标和笔输入,可能会以略有不同的方式发生此情况。

  • 触摸需要手指接触才能引发此事件,无论是从对元素直接触摸按下还是移动到该元素的绑定区域。
  • 鼠标和触摸板都有一个屏幕光标,该光标始终可见并且可引发此事件,即使未按下任何鼠标或触摸板按钮也是如此。
  • 和触摸一样,笔通过对元素直接按下笔或移动到该元素的绑定区域来引发此事件。 但是,笔也有悬停状态 (IsInRange),当为 true 时,将会触发此事件。

PointerExited

在指针离开元素的边界区域时发生。 对于触摸、触摸板、鼠标和笔输入,可能会以略有不同的方式发生此情况。

  • 触摸需要手指接触,并在指针移出该元素的绑定区域时引发此事件。
  • 鼠标和触摸板都有一个屏幕光标,该光标始终可见并且可引发此事件,即使未按下任何鼠标或触摸板按钮也是如此。
  • 和触控一样,笔在移出该元素的边界区域时触发此事件。 但是,笔也有悬停状态 (IsInRange),当状态从 true 更改为 false 时触发此事件。

PointerMoved

在指针更改元素的绑定区域内的坐标、按钮状态、压力、倾斜或接触几何图形(例如宽度和高度)时发生。 对于触摸、触摸板、鼠标和笔输入,可能会以略有不同的方式发生此情况。

  • 触摸需要手指接触,并且仅在与该元素的绑定区域接触时引发此事件。
  • 鼠标和触摸板都有一个屏幕光标,该光标始终可见并且可引发此事件,即使未按下任何鼠标或触摸板按钮也是如此。
  • 和触控一样,笔在与该元素的边界区域接触时触发此事件。 但是,笔也有悬停状态 (IsInRange),当为 true 且位于元素的边界区域内时,将触发此事件。
  • IsInContact获取一个值,该值指示输入设备 (触摸、笔/触笔) 触摸数字化器表面,还是按下鼠标按钮。
  • 若要指定仅在当前有光标的控件内引发事件,则只让当前控件获取到焦点(CapturePointer方法)

PointerPressed

在指针指示元素的绑定区域内发生按下操作(例如触摸按下、鼠标按钮按下、笔按下或触摸板按钮按下)时发生。

必须从处理程序中对此事件调用 CapturePointer

PointerReleased

在指针指示元素的绑定区域内发生释放事件(例如触摸抬起、鼠标按钮抬起、笔抬起或触摸板按钮抬起)时或在绑定区域外捕获到该指针时发生。

PointerWheelChanged

在鼠标滚轮转动时发生。

鼠标输入与第一次检测到鼠标输入时分配的单个指针相关联。 单击鼠标按钮(左键、滚轮或右键)会通过 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

引用参考链接:

触控设计准则

触控开发人员准则

指针输入

WPF多点触控开发资料

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值