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 事件會引發,以回應最初在元素界限區域中離開該周框區域的指標。 觸控、滑鼠和手寫筆/手寫筆互動會在 UWP app 中接收、處理及管理為指標輸入。 這些裝置及其互動都可以產生 PointerExited 事件。 如需詳細資訊,請參閱本主題中的 處理指標輸入 和其他備註。

使用以 PointerEventHandler 為基礎的處理常式來處理此事件。

對於觸控動作以及因為觸控動作而引發的互動特定或操作事件,元素必須具有點擊測試可見性,才能成為事件來源並引發與動作相關聯的事件。 UIElement.Visibility 必須是 Visible。 衍生類型的其他屬性也會影響點擊測試可見度。 如需詳細資訊,請參閱事件與路由事件概觀

PointerExited 支援將事件處理常式附加至將叫用的路由,即使事件的事件資料標示為 Handled 也一樣。 請參閱 AddHandler

特定Windows 執行階段控制項可能有 PointerExited 輸入事件的類別型處理。 如果是,控制項可能具有 OnPointerExited方法的覆寫。 一般而言,類別處理常式不會標示事件處理,因此 PointerExited 事件仍然可以由 UI 中控制項的使用者程式碼處理。 如需事件類別型處理運作方式的詳細資訊,請參閱 事件和路由事件概觀

如果另一個專案已擷取指標,即使擷取的指標離開元素的界限,PointerExited 也不會引發。 如需指標擷取的詳細資訊,請參閱 CapturePointerMouse 互動

滑鼠和手寫筆/手寫筆輸入的 PointerExited

滑鼠輸入裝置具有螢幕上的游標,每當滑鼠移動時,即使沒有按下滑鼠按鍵亦然。 類似的行為適用于手寫筆裝置輸入,其中輸入裝置可以偵測手寫筆停留在輸入裝置介面上, (IsInRange) 但未觸碰它。 滑鼠和手寫筆裝置輸入會引發 PointerExited 事件,與觸控事件稍有不同。 如需詳細資訊,請參閱互動。 PointerExited 事件會在引發元素的最後一個 PointerMoved 事件之後引發。

Touch 輸入的 PointerExited

只有在手指觸碰表面時,才能偵測到觸控點。 每當觸控動作產生 PointerReleased 事件時,該事件會緊接在 PointerExited 事件後面,而兩個事件的所有事件資料都是相同的資訊, (相同的指標識別碼、相同位置等等。) 換句話說,指標會被視為在觸控點觸碰元素的目前和位置。

或者,如果指標在移動時保持與表面的常數接觸,一開始在元素上方,然後結束元素的點擊測試界限,則觸控點會產生 PointerExited。 針對這類觸控動作,您也可以將動作當作操作或手勢來處理,而不是指標事件。 如需詳細資訊,請參閱 處理指標輸入

PointerExited 的路由事件行為

PointerExited 是路由事件。 如需路由事件概念的詳細資訊,請參閱 事件和路由事件概觀。 您可以在 XAML UI 中為元素定義多個 PointerExited 事件,包括父子式關聯性中的元素。 在一般 UI 組合中,子項目位於父元素界限內的某處,因此當指標移出子系時,子系會先發生 PointerExited 事件,然後在指標完全移出該父系時,針對父元素髮生。 PointerExited 事件通常不會在子項目引發時反升至父代,因為輸入系統也會混淆,以將 PointerExited 事件也路由傳送至父代。 通常您不希望 PointerExited 事件路由傳送,您只想從傳送者處理它們。 您可以在處理常式中將 Handled 設定為 true ,明確地防止事件路由。

在罕見的情況下,您可以看到 PointerExited 事件泡泡至父系。 例如,如果您使用 RenderTransform 來位移父系界限外的子項目,則事件會在子項目結束時反升至父元素,並提供事件資訊,如子項目引發事件的方式所報告。

PointerOver 控制項的視覺狀態

具有控制項範本的控制項只能在指標超出控制項界限時套用作用中的視覺狀態。 您不一定要處理 PointerEntered 或 PointerExited,以取得或變更此行為。 您可能需要重新建立控制項的範本。 如果您要衍生自已經具有叫用視覺狀態之低階輸入處理的現有控制項,您應該在 「CommonStates」 VisualStateGroup中提供名為 「PointerOver」 的視覺狀態,而內建控制項邏輯會在指標超過控制項時載入該視覺狀態。 指標上方的視覺狀態通常會出現在可以叫用或選取的控制項上,例如 ButtonListViewItem。 如果您衍生自控制項之類的基類,其沒有叫用視覺狀態的內建輸入事件處理,您可能需要自行覆寫OnPointerEntered 和 OnPointerExited以取得此行為。 使用 OnPointerExited 呼叫 GoToState 以載入 「PointerOver」 狀態以外的狀態,例如 「Normal」。 如需詳細資訊,請參閱視覺狀態的腳本動畫

Windows 8 行為

針對 Windows 8,如果螢幕游標 (或手寫筆或觸控點) 實際上並未移動, 則 PointerEntered 事件不會引發。 例如,如果滑鼠和其螢幕上游標維持固定狀態,且具有PointerEntered處理常式的物件已轉譯或調整為在螢幕游標下方移動,則 PointerEntered不會引發。 或者,如果快顯視窗或飛出視窗之類的專案消失,而且指標現在位於新元素上方 (,但指標尚未移動) ,則 PointerEntered 不會引發。 與這個相關的是 PointerExited 行為。 例如,如果以程式設計方式關閉快顯視窗,如果指標未移動作為關閉它的原因,它就不會引發 PointerExited。 如果指標在剛顯示的專案上移動,但由使用者決定是否會發生,而且會在移動時發生,而不是關閉時發生,您仍會收到 PointerEntered 事件。 簡單地說,嘗試在 Windows 8 中針對指標狀態判斷引發 PointerEntered 的最後一個專案並不完整,而且有許多案例會指出 PointerEntered 和 PointerExited 不會配對。 這會影響使用 PointerEntered 和 PointerExited 做為觸發程式的控制項視覺狀態。

從 Windows 8.1 開始,指標一次引發PointerEntered事件的任何情況都會引發 PointerExited,但某些 UI 狀態變更會在指標不再在該元素內發生。 這包括整個元素消失的情況。 而且,如果指標現在位於不同的元素上,因為先前的專案消失,即使指標永遠不會移動,該元素也會引發 PointerEntered。 以程式設計方式將其Visibility設定為Collapsed 的專案,是元素可能從 UI 消失的其中一種方式,而Windows 8.1行為會考慮此問題,並且會針對新顯示的專案引發Collapsed元素和PointerEntered 的 PointerExited

如果您將應用程式程式碼從 Windows 8 移轉至Windows 8.1您可能想要考慮此行為變更,因為它會導致 PointerExited 和PointerEntered在之前未引發的情況下引發。

針對 Windows 8 編譯但在 Windows 8.1 上執行的應用程式會繼續使用 Windows 8 的行為。

適用於

另請參閱