UIElement.PointerEntered 事件

定义

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

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

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

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

事件类型

注解

事件 PointerEntered 触发以响应移动到元素边界区域的指针。 触摸、鼠标和笔/触笔交互在应用中作为指针输入进行接收、处理和管理。 其中任何设备及其交互都可以生成事件 PointerEntered 。 有关详细信息,请参阅 处理指针输入 和本主题中的其他说明。

PointerEntered 是路由事件。 有关路由事件概念的详细信息,请参阅 事件和路由事件概述

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

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

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

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

鼠标和笔/触笔输入的 PointerEntered

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

用于触摸输入的 PointerEntered

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

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

PointerEntered 的路由事件行为

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

在极少数情况下,可以看到 PointerEntered 父级的事件气泡。 例如,如果使用 RenderTransform 将子元素偏移到其父元素的边界之外,则输入子元素时,事件会气泡到父元素,并按子元素触发事件的方式提供事件信息。

指针捕获

如果另一个元素已捕获指针, PointerEntered 则即使捕获的指针进入元素的边界,也不会触发。 但是,如果在指针位于元素上时释放指针捕获, PointerEntered 则会触发,即使认为在这种情况下指针可能保持静止。 事件数据中的 GetCurrentPoint 值可能是元素中间某个位置的点,而不是其边缘的点,因为释放捕获时指针已经位于元素上。 有关指针捕获的详细信息,请参阅 CapturePointer鼠标交互

PointerOver 控件的视觉状态

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

适用于

另请参阅