UIElement.Holding 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当此元素的命中测试区域发生其他未处理的 保持 交互时发生。
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"/>
事件类型
注解
触摸可以产生 “保留” 操作,但鼠标设备通常不能。 有关详细信息,请参阅 处理指针输入。
点击、双点击和 RightTapped 事件仅在删除触摸点后发生。 但是,当触摸点仍处于接触状态时,将发生初始“保留”事件。 如果触摸点在一段时间内保持大致相同的 PointerPoint 位置,则会发生该事件。 用户可通过系统设置调整系统解释为保留操作的确切时间。
保留适用于信息 UI,但对于显示上下文菜单等交互,应改用 RightTapped 。 可以先处理 Holding 以显示菜单将出现的提示,但若要显示菜单本身,请使用 RightTapped 处理程序。 有关如何在应用设计中使用保留交互的详细信息,请参阅触摸交互设计或自定义用户交互的 UX 指南。
持有事件通常成对发生。 当操作首次被解释为基于一段时间内没有移动的保留操作时,Holding 将触发,HoldingState 值在 HoldingRoutedEventArgs 事件数据中为 Started。 当“保留”操作结束时,将触发另一个“保留”事件,这次是 HoldingState 为“已完成”或“已取消”。
如果用户在“保留”状态期间不移动指针,则“保留”操作以 HoldingState 为 Completed 结束,然后释放启动操作的指针点。 对于这种情况, RightTapped 将在第二个 Holding 事件之后触发。
如果用户将指针 (启动操作的) 移动,或者对于在操作期间更改元素上的命中测试状态或捕获另一个指针等不常见情况,则 HoldState 操作以 “已取消 ”结束。 如果 “保留 ”操作以 HoldingState 作为 Canceled 结束, 则 RightTapped 不会触发。
Holding 事件表示手势,而 PointerPressed 事件是较低级别的输入事件。 保存和 PointerPressed 事件可能会因为单个用户交互而触发。 即使控件已在控件逻辑中处理指针事件或正在处理操作,也不会阻止 Holding 触发。
Holding 事件可能是多个指针点的结果。 对于更高级别的手势事件(如“保留”),你不再具有对 PointerPoint 详细信息(如单个 PointerId 值或单个坐标)的即时访问权限。 你确实有权访问设备类型 (PointerDeviceType) ,对于坐标,可以调用 GetPosition,它提供来自多个指针点的 保持 坐标的平均值。
持有是路由事件。 此外,元素必须具有 IsHoldingEnabled 为 true 才能成为 Holding 事件源 (true 是默认) 。 如果事件从 IsHoldingEnabled 为 false 的事件源子元素气泡到父元素,则即使父元素上的 IsHoldingEnabled 为 false,也可以处理父元素上的保留。 有关路由事件概念的详细信息,请参阅 事件和路由事件概述。
对于触摸操作以及特定于交互的事件或一个触摸操作引起的操作事件,一个元素必须对点击测试可见,以用作事件源并触发与该操作关联的事件。 UIElement.Visibility 必须为 Visible。 派生类型的其他属性也会影响命中测试可见性。 有关详细信息,请参阅事件和路由事件概述。
Holding 支持将事件处理程序附加到将调用的路由,即使事件的事件数据标记为“ 已处理”也是如此。 请参阅 AddHandler。
特定Windows 运行时控件可能对 Holding 事件具有基于类的处理。 如果是这样,则控件可能具有 OnHolding 方法的替代。 有关事件基于类的处理工作原理的详细信息,请参阅 事件和路由事件概述。
点击 和持有是相互排斥的。 如果操作超过时间阈值,则不被视为“点击”操作。
只要元素通过非默认 ManipulationMode 值支持操作事件, 则 ManipulationStarting 也会触发。 如果指针点停留在一个位置足够长的时间,以便检测到“保留”,但之后用户移动与 “保留 ”操作关联的指针点而不释放它们 (导致另一个 Holding 事件,其中 HoldingState 为 Canceled) ,则其他操作事件(如 ManipulationStarted 和 ManipulationDelta )也可以触发。
按住鼠标和笔/触笔输入
默认情况下,无论鼠标按钮按住多长时间或按住哪个按钮,鼠标输入都不会产生“按住”事件。 但是,当按下并释放鼠标右键或等效项时,鼠标设备和某些笔设备可能会触发 RightTapped 。
注意
如果使用自己的 GestureRecognizer 并在设置中指定 HoldWithMouse ,则可以将鼠标操作视为保持操作。