預覽事件

預覽事件也稱為通道事件,是路由事件,路由的方向會從應用程式根目錄向引發事件的專案移動,並回報為事件資料中的來源。 並非所有事件案例都支援或需要預覽事件;本主題描述預覽事件存在的情況、應用程式或元件應該如何處理這些事件,以及在自訂群組件或類別中建立預覽事件的情況可能適當。

預覽事件和輸入

當您一般處理預覽事件時,請謹慎標記事件資料中處理的事件。 在引發它之專案以外的任何元素上處理 Preview 事件(在事件資料中回報為來源的專案)具有無法提供元素處理其產生事件的機會的效果。 有時候這是想要的結果,特別是當有問題的元素存在於控制群組合內的關聯性中時。

針對具體輸入事件,預覽事件也會與對等的反升事件共用事件資料實例。 如果您使用 Preview 事件處理常式來標記已處理的輸入事件,將不會叫用反升輸入事件類別處理常式。 或者,如果您使用 Preview 事件處理常式來標記已處理的事件,通常不會叫用反升事件的處理常式。 類別處理常式或實例處理常式可以註冊或附加要叫用的選項,即使事件標示為已處理,但這項技術並不常用。

如需類別處理及其與預覽事件關聯的詳細資訊,請參閱 將路由事件標示為已處理,以及類別處理

處理控制項的事件隱藏項目

常用預覽事件的一個案例是用於對輸入事件的複合控制項處理。 有時候,控制項的作者會隱藏來自其控制項的特定事件,或許是為了替代含有更多資訊或隱含更特定行為的元件定義事件。 例如,Windows Presentation Foundation (WPF) Button 會隱藏 MouseLeftButtonDownMouseRightButtonDown 或其複合元素引發 Button 的事件,以利擷取滑鼠並引發 Click 一律由 Button 本身引發的事件。 事件及其資料仍會沿著路由繼續,但由於 會將 Button 事件資料標示為 Handled ,因此只會叫用特別指出事件在案例中採取行動的事件 handledEventsToo 處理常式。 如果應用程式根目錄的其他元素仍希望有機會處理控制項隱藏的事件,其中一個替代方法是在程式碼中附加處理常式,並 handledEventsToo 指定為 true 。 但通常更簡單的技術是變更您處理的路由方向,以作為對等的輸入事件預覽。 例如,如果控制項隱藏 MouseLeftButtonDown ,請嘗試改為附加 處理常式 PreviewMouseLeftButtonDown 。 這項技術只適用于基底專案輸入事件,例如 MouseLeftButtonDown 。 這些輸入事件會使用通道/泡泡組、引發事件,以及共用事件資料。

這些技術都有副作用或限制。 處理 Preview 事件的副作用是,處理該時間點的事件可能會停用預期處理浮凸事件的處理常式,因此限制是,在事件仍在路由的預覽部分時標記事件通常不是個好主意。 這項技術的限制 handledEventsToo 是您無法在 XAML 中指定 handledEventsToo 處理常式做為屬性,您必須在程式碼中註冊事件處理常式,然後取得要附加處理常式之專案的物件參考。

另請參閱