UIElement.Holding 事件

定义

在此元素的命中测试区域上发生未处理的 保留 交互时发生。

public:
 virtual event HoldingEventHandler ^ Holding;
// Register
event_token Holding(HoldingEventHandler const& handler) const;

// Revoke with event_token
void Holding(event_token const* cookie) const;

// Revoke with event_revoker
UIElement::Holding_revoker Holding(auto_revoke_t, HoldingEventHandler const& handler) const;
public event HoldingEventHandler Holding;
function onHolding(eventArgs) { /* Your code */ }
uIElement.addEventListener("holding", onHolding);
uIElement.removeEventListener("holding", onHolding);
- or -
uIElement.onholding = onHolding;
Public Custom Event Holding As HoldingEventHandler 
<uiElement Holding="eventhandler"/>

事件类型

注解

触摸可以产生 “按住 ”操作,但鼠标设备通常不能。 有关详细信息,请参阅 处理指针输入

仅当删除触摸点后,才会发生 TapppedDoubleTappedRightTapped 事件。 但是,当触摸点仍处于接触状态时,将发生初始 Holding 事件。 如果触摸点在一段时间内保持大致相同的 PointerPoint 位置,则会发生该事件。 系统解释为保持操作的确切时间可由用户通过系统设置进行调整。

保持适用于信息性 UI,但对于显示上下文菜单等交互,应改用 RightTapped 。 可以先处理 Holding 来显示将显示菜单的提示,但若要显示菜单本身,请使用 RightTapped 处理程序。 有关如何在应用设计中使用保留交互的详细信息,请参阅触摸交互设计自定义用户交互的 UX 指南

持有事件通常成对发生。 当操作首次解释为基于一段时间内没有移动的保留操作时,Holding 将触发,HoldingState 值在 HoldingRoutedEventArgs 事件数据中为 Started。 “ 保留 ”操作结束时,另一个 Holding 事件将触发,这一次 ,HoldingStateCompletedCanceled

  • 如果用户在“保留”状态期间不移动指针,则“保留”操作以 HoldingState 结尾,然后释放启动该操作的指针点。 在这种情况下, RightTapped 将在第二个 Holding 事件之后触发。

  • 如果用户将指针 (启动操作的) 移动,则 HoldState 操作以 HoldingState 结尾,或者对于在操作期间更改元素的命中测试状态或捕获另一个指针等不常见情况也是如此。 如果 Hold 操作以 HoldStateCanceled 结束, 则 RightTapped 不会触发。

Holding 事件表示手势,而 PointerPressed 事件是较低级别的输入事件。 持有和 PointerPressed 事件可能会因单个用户交互而触发。 即使控件已在控制逻辑中处理指针事件或正在处理操作,也不会阻止 Holding 触发。

Holding 事件可能是多个指针点的结果。 对于更高级别的手势事件(如 Holding),你不再能够立即访问 PointerPoint 详细信息,例如单个 PointerId 值或单个坐标。 你确实有权访问设备类型 (PointerDeviceType) ,对于坐标,可以调用 GetPosition,这会提供来自多个指针点的 保持 的坐标平均值。

持有是路由事件。 此外,元素必须具有 IsHoldingEnabled为 true 才能成为 Holding 事件源, (true 是默认) 。 如果事件从 IsHoldingEnabledfalse 的事件源子元素浮升到父元素中,即使 IsHoldingEnabledfalse,也可以处理父元素上的 Holding。 有关路由事件概念的详细信息,请参阅 事件和路由事件概述

对于触摸操作以及特定于交互的事件或一个触摸操作引起的操作事件,一个元素必须对点击测试可见,以用作事件源并触发与该操作关联的事件。 UIElement.Visibility 必须为 Visible。 派生类型的其他属性也会影响命中测试可见性。 有关详细信息,请参阅事件和路由事件概述

Holding 支持将事件处理程序附加到将调用的路由,即使事件的事件数据标记为“ 已处理”也是如此。 请参阅 AddHandler

特定Windows 运行时控件可能对 Holding 事件具有基于类的处理。 如果是这样,控件可能具有 OnHolding 方法的替代。 有关事件基于类的处理工作原理的详细信息,请参阅 事件和路由事件概述

点击 和持有是相互排斥的。 如果操作超过时间阈值,被视为 “保留 ”操作,则不会将其视为 “点击” 操作。

只要元素通过非默认的 ManipulationMode 值支持操作事件,则 ManipulationStarting 也会触发。 如果指针点停留在一个位置足够长的时间,以便检测到 Holding,但此后用户移动与 Hold 操作关联的指针点而不释放它们 (导致另一个 Holding 事件,其中 HoldingStateCanceled) ,则其他操作事件(如 ManipulationStartedManipulationDelta )也可以触发。

鼠标和笔/触笔输入的保持

默认情况下,无论鼠标按钮按住多长时间或按住哪个按钮,鼠标输入都不会产生 Holding 事件。 但是,当按下并释放鼠标右键或等效项时,鼠标设备和某些笔设备可能会触发 RightTapped

注意

如果使用自己的 GestureRecognizer 并在设置中指定 HoldWithMouse ,则可以将鼠标操作视为保持操作。

适用于

另请参阅