UIElement.PointerExited 事件

定义

当指针离开此元素的命中测试区域时发生。

public:
 virtual event PointerEventHandler ^ PointerExited;
// Register
event_token PointerExited(PointerEventHandler const& handler) const;

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

// Revoke with event_revoker
UIElement::PointerExited_revoker PointerExited(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerExited;
function onPointerExited(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointerexited", onPointerExited);
uIElement.removeEventListener("pointerexited", onPointerExited);
- or -
uIElement.onpointerexited = onPointerExited;
Public Custom Event PointerExited As PointerEventHandler 
<uiElement PointerExited="eventhandler"/>

事件类型

注解

事件 PointerExited 触发以响应最初位于元素的边界区域中离开该边界区域的指针。 触摸、鼠标和笔/触笔交互作为应用中的指针输入进行接收、处理和管理。 这些设备中的任何一个及其交互都可以生成 PointerExited 事件。 有关详细信息,请参阅本主题中的 处理指针输入 和其他备注。

使用基于 PointerEventHandler 的处理程序来处理此事件。

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

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

特定Windows 运行时控件可能对输入事件具有基于类的PointerExited处理。 如果是这样,控件可能具有 OnPointerExited 方法的替代。 通常,事件未标记为由类处理程序处理,因此 PointerExited 仍可由 UI 中控件的用户代码处理该事件。 有关事件基于类的处理工作原理的详细信息,请参阅 事件和路由事件概述

如果另一个元素捕获了指针, PointerExited 即使捕获的指针离开元素的边界,也不会触发。 有关指针捕获的详细信息,请参阅 CapturePointer鼠标交互

指针已针对鼠标和笔/触笔输入使用

鼠标输入设备具有一个屏幕光标,每当鼠标移动时,该光标都可见,即使当时没有按下鼠标按钮。 类似的行为可用于笔设备输入,其中输入设备可以检测到触笔悬停在输入设备图面上, (IsInRange) 但不触摸它。 因此,鼠标和笔设备输入将在与触摸事件略有不同的情况下触发 PointerExited 事件。 有关详细信息,请参阅鼠标交互。 事件在元素触发的最后一个 PointerExitedPointerMoved 事件之后触发。

针对触摸输入的 PointerExited

仅当手指触摸表面时,才能检测到触摸点。 每当触摸操作导致 PointerReleased 事件时,该事件紧跟一个事件,所有事件数据都是两个 PointerExited 事件的相同信息, (相同的指针 ID、相同位置等。) 换句话说,指针被视为在触摸点触摸元素的时刻和位置进入元素。

或者,如果指针在移动时与图面保持恒定接触,最初位于元素上方,然后退出元素的命中测试边界,则触摸点将生成 PointerExited 。 对于这些类型的触摸操作,还可以将操作作为操作或手势而不是指针事件进行处理。 有关详细信息,请参阅 处理指针输入

PointerExited 的路由事件行为

PointerExited 是路由事件。 有关路由事件概念的详细信息,请参阅 事件和路由事件概述。 可以为 XAML UI 中的元素定义多个 PointerExited 事件,包括父子关系中的元素。 在典型的 UI 组合中,子元素位于父元素边界内的某个位置,因此, PointerExited 当指针移出子元素时,首先针对子元素发生事件,然后在指针完全移出该父元素时为父元素发生事件。 当子元素触发事件时,事件 PointerExited 通常不会浮升到父级,因为输入系统将事件事件也路由 PointerExited 到父级会令人困惑。 通常你不希望 PointerExited 事件仍然路由,你只想从发送方处理它们。 可以通过在处理程序中将 Handledtrue 设置为 来显式阻止事件路由。

在极少数情况下,可能会看到 PointerExited 父级的事件气泡。 例如,如果已使用 RenderTransform 来偏移其父元素边界之外的子元素,则事件会在子元素退出时浮升到父元素,并提供子元素触发事件的方式所报告的事件信息。

PointerOver 控件的视觉状态

只有指针位于控件边界上时,具有控件模板的控件才能应用处于活动状态的视觉状态。 并不总是需要处理 PointerEnteredPointerExited 获取或更改此行为。 可能需要重新创建控件模板。 如果派生自已具有调用视觉状态的低级别输入处理的现有控件,则应在“CommonStates” VisualStateGroup 中提供名为“PointerOver”的视觉状态,并且只要指针位于控件上,内置控件逻辑就会加载该视觉状态。 指针悬停的视觉状态通常存在于可调用或选择的控件上,如 ButtonListViewItem。 如果派生自没有调用视觉状态的内置输入事件处理的基类(如 Control ),可能需要重写 OnPointerEnteredOnPointerExited 自己才能获取此行为。 使用 OnPointerExited 调用 GoToState 以加载“PointerOver”状态以外的状态,例如“Normal”。

适用于

另请参阅