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 必須是 可見的。 衍生型別的其他特性也會影響命中測試的可見性。 如需詳細資訊,請參閱事件與路由事件概觀

PointerEntered 支援即使事件資料標記 為已處理,也能將事件處理器附加到將被呼叫的路由上。 請參見 AddHandler

特定的 Windows 執行階段 控制項可能對 PointerEntered 輸入事件有類別處理。 如果是這樣,控制項大概有覆蓋 OnPointerEnter 的方法。 通常事件不會被類別處理器標記為已處理,因此 PointerEntered 事件仍可由使用者程式碼在使用者介面中的控制項中處理。 關於基於類別的事件處理方式,請參閱 事件與路由事件總覽

輸入滑鼠與筆/觸控筆的指標

滑鼠輸入裝置在螢幕上會有一個游標,只要滑鼠移動,即使當時沒有按住滑鼠按鈕,也會顯示出來。 在元素發射的第一個PointerMoved事件之前會先發生PointerEntered一個事件。 類似的行為也出現在筆裝置輸入上,輸入裝置能偵測到觸控筆懸停在輸入裝置表面(IsInRange)上方,但不會觸碰。 因此,滑鼠和筆裝置的輸入會在與觸控事件略有不同的情況下觸發 PointerEntered 事件。 更多資訊請參見 滑鼠互動

指針輸入用於觸控輸入

只有當手指觸碰到表面時,觸點才會被偵測到。 每當觸控動作產生 PointerPressed 事件時,該事件前會立即接著事件 PointerEntered ,且所有事件資料對兩個事件的資訊相同(相同的指標 ID、相同位置等)。換句話說,指標被視為在元素被觸點觸碰的瞬間和位置進入該元素。

或者,如果指標在移動時持續與表面接觸,並進入元素的碰撞測試範圍,則會產生 PointerEntered 觸點。 對於這類觸控動作,也有可能將動作視為一種操作或手勢,而非指標事件。 更多資訊請參見 「Handle指標輸入」。

PointerEntered 的路由事件行為

PointerEntered 是路由事件。 欲了解更多路由事件概念,請參閱 事件與路由事件總覽。 你可以為 XAML UI 中的元素定義多個 PointerEntered 事件,包括屬於父子關係的元素。 在典型的 UI 組合中,子元素位於父元素的範圍內,因此 PointerEntered 當指標移動到父元素時,事件會先發生在父元素身上,然後當指標移動到父元素時,子元素也會發生。 PointerEntered當子元素觸發事件時,事件通常不會冒泡到父節點,因為概念上指標已經在父節點範圍內,輸入系統若將事件發生也導向PointerEntered父節點會造成混淆。 通常你不希望 PointerEntered 事件被路由,只想從發送者那裡處理。 你可以在處理器中將 Handled 設定為 true 明確阻止事件路由。

在極少數情況下,可能會看到 PointerEntered 事件泡泡傳到父端。 舉例來說,如果你用 RenderTransform 把子元素偏移到父元素範圍之外,當輸入子元素時,事件會冒泡到父元素,並根據子元素觸發事件的方式回報事件資訊。

指標捕獲

如果其他元素已經捕獲了指標, PointerEntered 即使捕獲指標進入該元素的邊界,也不會觸發。 然而,如果在指標在元素上方時釋放捕獲, PointerEntered 即使指標在此情況下可能保持靜止,捕獲也會發射。 事件資料中的 GetCurrentPoint 值可能是元素中間某個點,而非邊上的一個點,因為捕獲時指標已經在元素上方。 欲了解更多指標擷取資訊,請參閱 CapturePointerMouse 互動

控制項的 PointerOver 視覺狀態

擁有控制範本的控制項可套用僅在指標超過控制範圍時啟用的視覺狀態。 你不一定需要處理 PointerEntered 或指向 接才能獲得或改變這種行為。 你可能需要重新模板化控制項。 如果你是從已有已具備低階輸入處理的控制項衍生,該控制項已具備調用視覺狀態的低階輸入處理功能,你應該在「CommonStates」的 VisualStateGroup 中提供一個名為「PointerOver」的視覺狀態,內建控制邏輯會在指標上方時載入該視覺狀態。 指標切換的視覺狀態通常會出現在可呼叫或選取的控制項上,例如按鈕( Button )或 ListViewItem。 如果你是從像 Control 這種沒有內建輸入事件處理來呼叫視覺狀態的基底類別衍生出來的,你可能需要自己覆寫 OnPointerEnteredOnPointerExited 來達成這個行為。

適用於

另請參閱