共用方式為


預覽事件

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

預覽事件和輸入

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

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

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

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

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

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

另請參閱