UIElement.AddHandler(RoutedEvent, Object, Boolean) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
加入所指定路由事件的路由事件處理常式,會將此處理常式加入目前項目的處理常式集合中。 指定 handledEventsToo
為 true
,即使事件是在其他地方處理,仍要叫用提供的處理常式。
public:
virtual void AddHandler(RoutedEvent ^ routedEvent, Platform::Object ^ handler, bool handledEventsToo) = AddHandler;
void AddHandler(RoutedEvent const& routedEvent, IInspectable const& handler, bool const& handledEventsToo);
public void AddHandler(RoutedEvent routedEvent, object handler, bool handledEventsToo);
function addHandler(routedEvent, handler, handledEventsToo)
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Object, handledEventsToo As Boolean)
參數
- routedEvent
- RoutedEvent
要處理的路由事件識別項。
- handler
-
Object
Platform::Object
IInspectable
處理常式實作的參考。
- handledEventsToo
-
Boolean
bool
true
表示註冊處理常式,即使路由事件在事件資料中標示為已處理,也會叫用處理程式。
false
表示向預設條件註冊處理常式,如果路由事件已標示為已處理,則不會叫用該處理常式。 預設值為 false
。
請勿定期要求重新處理路由事件,因為它會干擾Windows 執行階段事件系統的預期設計,以進行控制組合。
範例
此範例示範使用 和 handledEventsToo
作為 true
來連接事件處理常式 AddHandler
的基本語法。 在此情況下,正在有線的事件是 點選。 連線處理常式的一般位置是 針對頁面載入 ,或範本化控制項的 OnApplyTemplate 。
void MainPage::pageRoot_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
//implementation
}
void MainPage::pageRoot_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->AddHandler(UIElement::TappedEvent, ref new TappedEventHandler(this, &MainPage::pageRoot_Tapped), true);
}
private void pageRoot_Tapped(object sender, TappedRoutedEventArgs e)
{
//implementation
}
private void pageRoot_Loaded_1(object sender, RoutedEventArgs e)
{
this.AddHandler(UIElement.TappedEvent, new TappedEventHandler(pageRoot_Tapped), true);
}
備註
請勿嘗試使用 AddHandler
做為一般取代您通常用於連接事件處理常式的語言特定語法;它無法運作,因為並非所有事件都有可傳遞的 routedEvent
識別碼。
AddHandler
特別適用于路由事件,主要適用于傳遞 handledEventsToo
為 true
來啟用的特定案例。 如需詳細資訊,請參閱事件與路由事件概觀。
路由事件識別碼
路由事件識別碼通常是 UIElement的靜態屬性成員。 例如,若要新增 KeyUp 事件的處理常式,請傳遞此參數的 KeyUpEvent 。 只有少數Windows 執行階段事件具有此識別碼;只有UIElement上的路由事件具有可用於此用法的識別碼 API。 這些通常是與各種層級輸入動作相關的事件:指標層級、手勢層級、操作層級。 此外,可以透過這種方式處理索引鍵輸入事件。
以下是公開路由事件識別碼的路由事件清單,因此可由呼叫所 AddHandler
註冊的處理常式處理:
- DoubleTapped
- DragEnter
- DragLeave
- DragOver
- 下降
- Holding
- KeyDown
- KeyUp
- ManipulationCompleted
- ManipulationDelta
- ManipulationInertiaStarting
- ManipulationStarted
- ManipulationStarting
- PointerCanceled
- PointerCaptureLost
- PointerEntered
- PointerExited
- PointerMoved
- PointerPressed
- PointerReleased
- PointerWheelChanged
- RightTapped
- Tapped
處理常式參數
參數 handler
是不具類型的參數,但您應該提供新的委派來參考所需事件特有的處理常式方法。 例如,如果處理KeyUp事件,請傳遞參考以該 KeyEventHandler
委派簽章為基礎的方法的新KeyEventHandler實例。 這需要取值,而取值語法會根據您使用的語言而有所不同。 請參閱本主題中的範例。
使用handledEventsToo的時機
以實用的方式處理低階輸入事件是複雜的工作。 許多控制項會實作特定事件標示為已處理的行為,並被另一個更直覺的事件取代。 一般而言,只有在有一些設計意圖這麼做時,控制項才會將路由事件標示為已處理。 不過,在某些情況下,這些設計意圖可能不是您特定處理輸入事件所需的目的。 適用于適當地向 註冊處理常式 handledEventsToo
true
的這些案例。 但您不應該定期執行此動作。 叫用處理程式以回應所有事件,即使已處理會使您自己的應用程式事件處理邏輯複雜。 如果處理常式邏輯很大,您可能會看到效能降低。 只有在您發現某些控制項正在處理您想要使用應用程式邏輯處理的事件時,才應該將處理常式附加至已處理的事件。
另一種避免控制項類別處理行為的技巧,是控制及覆寫其 OnEvent 方法的子類別,這是控制項將事件標示為已處理的預先設定覆寫。 不過,這也可能相當複雜。 您可能必須重現控制項的處理實作,而不呼叫基底實作,因為基底實作會將事件標示為已處理。 如需詳細資訊,請參閱事件與路由事件概觀。