UIElement.PointerEntered 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
發生于指標進入這個專案的點擊測試區域時。
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 事件會引發,以回應移至元素周框區域的指標。 觸控、滑鼠和手寫筆/手寫筆互動會在 UWP 應用程式中接收、處理及管理為指標輸入。 這些裝置及其互動都可以產生 PointerEntered 事件。 如需詳細資訊,請參閱 處理指標輸入 ,以及本主題中的其他備註。
PointerEntered 是路由事件。 如需路由事件概念的詳細資訊,請參閱 事件和路由事件概觀。
使用以 PointerEventHandler 為基礎的處理常式來處理此事件。
對於觸控動作以及因為觸控動作而引發的互動特定或操作事件,元素必須具有點擊測試可見性,才能成為事件來源並引發與動作相關聯的事件。 UIElement.Visibility 必須是 可見的。 衍生型別的其他屬性也會影響點擊測試可見度。 如需詳細資訊,請參閱事件與路由事件概觀。
PointerEntered 支援將事件處理常式附加至將叫用的路由,即使事件的事件資料標示為 Handled也一樣。 請參閱 AddHandler。
特定Windows 執行階段控制項可能有 PointerEntered 輸入事件的類別型處理。 如果是,控制項可能具有 OnPointerEntered方法的覆寫。 一般而言,事件不會標示為類別處理常式處理,因此 PointerEntered 事件仍然可以由 UI 中控制項的使用者程式碼處理。 如需事件類別型處理運作方式的詳細資訊,請參閱 事件和路由事件概觀。
滑鼠和手寫筆/手寫筆輸入的 PointerEntered
滑鼠輸入裝置具有螢幕游標,每當滑鼠移動時,即使沒有按下滑鼠按鍵,也一樣。 PointerEntered 事件會在元素所引發的第一個 PointerMoved 事件之前。 類似的行為適用于手寫筆裝置輸入,其中輸入裝置可以偵測手寫筆停留在輸入裝置介面上, (IsInRange) 但無法觸碰它。 滑鼠和手寫筆裝置輸入因此會在與觸控事件稍有不同的情況下引發 PointerEntered 事件。 如需詳細資訊,請參閱互動。
觸控輸入的 PointerEntered
只有在手指觸碰表面時,才能偵測到觸控點。 每當觸控動作產生 PointerPressed 事件時,該事件就會緊接在 PointerEntered 事件之前,所有事件資料都是相同的兩個事件資訊, (相同的指標識別碼、相同位置等等。) 換句話說,指標會被視為在觸控點所觸碰的目前和位置輸入元素。
或者,如果指標在移動時仍與表面保持固定接觸,並輸入元素的點擊測試界限,則觸控點會產生 PointerEntered。 針對這類觸控動作,您也可以將動作當作操作或手勢來處理,而不是指標事件。 如需詳細資訊,請參閱 處理指標輸入。
PointerEntered 的路由事件行為
PointerEntered 是路由事件。 如需路由事件概念的詳細資訊,請參閱 事件和路由事件概觀。 您可以定義 XAML UI 中元素的多個 PointerEntered 事件,包括父子關聯性中的元素。 在一般 UI 組合中,子項目位於父元素界限內的某處,因此當指標移到父系時,父代的 PointerEntered 事件會先發生,然後在指標移到該處時,針對子專案。 當子項目引發指標時,PointerEntered 事件通常不會反升至父元素,因為指標已經位於父系界限內,而且輸入系統也會混淆,以將 PointerEntered 事件發生方式路由傳送至父系。 您通常不想讓 PointerEntered 事件路由傳送,您只想要從寄件者處理它們。 您可以在處理常式中將 [已處理 ] 設定為 true ,明確地防止事件路由。
在少數情況下,可以看到 PointerEntered 事件泡泡到父代。 例如,如果您使用 RenderTransform 來位移父系界限以外的子項目,則當輸入子項目時,事件會泡泡到父元素,並提供事件資訊,如子項目引發事件的方式所報告。
指標擷
如果另一個元素已擷取指標,即使擷取的指標進入元素的界限,PointerEntered 也不會引發。 不過,如果在指標位於 元素上方時釋放指標擷取,則 PointerEntered 會接著引發,甚至認為指標可能在此案例中維持固定狀態。 來自事件資料的 GetCurrentPoint 值可能是元素中間某個點,而不是沿著其邊緣的某個點,因為指標已在釋放擷取時位於元素上方。 如需指標擷取的詳細資訊,請參閱 CapturePointer 或 Mouse 互動。
控制項的 PointerOver 視覺狀態
具有控制項範本的控制項只能在指標超出控制項界限時套用作用中的視覺狀態。 您不一定需要處理 PointerEntered 或 PointerExited ,以取得或變更此行為。 您可能需要重新範本控制項。 如果您衍生自已經有叫用視覺狀態之低階輸入處理的現有控制項,您應該在 「CommonStates」 VisualStateGroup中提供名為 「PointerOver」 的視覺狀態,而內建控制項邏輯會在指標超過控制項時載入該視覺狀態。 指標的視覺狀態通常存在於可叫用或選取的控制項上,例如 Button 或 ListViewItem。 如果您衍生自 控制項之類的基 類,其沒有叫用視覺狀態的內建輸入事件處理,您可能需要覆寫 OnPointerEntered 和 OnPointerExited 自行取得此行為。 如需詳細資訊,請參閱視覺狀態的腳本動畫。
Windows 8 行為
對於 Windows 8,如果螢幕上的游標 (或手寫筆或觸控點,通常不會引發 PointerEntered 事件) 實際上並未移動。 例如,如果滑鼠和其螢幕游標維持固定狀態,且具有 PointerEntered 處理常式的物件已轉譯位置或調整為在螢幕游標下移動,則 PointerEntered 不會引發。 或者,如果快顯視窗或飛出視窗之類的專案消失,指標現在會消失,而指標現在會 (,但指標尚未移動) ,則不會引發 PointerEntered。 與這相關的是 PointerExited 行為。 例如,如果以程式設計方式關閉快顯視窗,如果指標未移動,則不會引發 PointerExited 作為關閉它的原因。 如果指標在新顯示的專案上移動,但這會由使用者決定是否會發生,而且會在移動時發生,而不是關閉時發生,您仍會收到 PointerEntered 事件。 簡單來說,嘗試使用在應用程式 UI 中針對指標狀態判斷引發 PointerEntered 的最後一個專案並不完整,而且有許多案例指出 PointerEntered 和 PointerExited 不會配對。 這會影響使用 PointerEntered 和 PointerExited 做為觸發程式的控制項的視覺狀態。
從Windows 8.1開始,會針對指標一次引發 PointerEntered 事件的任何情況引發PointerExited,但某些 UI 狀態變更會發生在該元素內不再發生指標的位置。 這包括整個元素消失的情況。 而且,如果指標現在位於不同的元素上,因為先前的專案消失,即使指標從未移動,該元素仍會引發 PointerEntered。 以程式設計方式將其Visibility設定為Collapsed的元素,是元素可能會從 UI 消失的其中一種方式,而Windows 8.1行為會考慮此專案,並針對新顯示的專案引發PointerExited和 PointerEntered。
如果您將應用程式程式碼從 Windows 8 遷移至Windows 8.1您可能會想要考慮此行為變更,因為它會導致PointerExited和 PointerEntered 在之前未引發的情況下引發。
針對 Windows 8 編譯但在 Windows 8.1 上執行的應用程式會繼續使用 Windows 8 的行為。