UIElement.AddHandler(RoutedEvent, Object, Boolean) Methode

Definition

Fügt einen Routingereignishandler für ein bestimmtes Routingereignis hinzu, wobei der Handler der Handlerauflistung für das aktuelle Element hinzugefügt wird. Geben Sie handledEventsToo als true an, damit der bereitgestellte Handler aufgerufen wird, auch wenn das Ereignis an anderer Stelle behandelt wird.

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)

Parameter

routedEvent
RoutedEvent

Ein Bezeichner für das zu behandelnde Routingereignis.

handler
Object

Platform::Object

IInspectable

Ein Verweis auf die Handlerimplementierung.

handledEventsToo
Boolean

bool

True , um den Handler so zu registrieren, dass er auch dann aufgerufen wird, wenn das Routingereignis in seinen Ereignisdaten als behandelt gekennzeichnet ist.

False , um den Handler mit der Standardbedingung zu registrieren, dass er nicht aufgerufen wird, wenn das Routingereignis bereits als behandelt markiert ist. Der Standardwert ist FALSE.

Bitten Sie nicht routinemäßig, ein Routingereignis erneut abzuhanden, da es den beabsichtigten Entwurf des Windows-Runtime Ereignissystems für die Steuerungskompository beeinträchtigt.

Beispiele

Dieses Beispiel zeigt die grundlegende Syntax für die Verkabelung eines Ereignishandlers mit AddHandler und handledEventsToo als true. In diesem Fall ist das verkabelte Ereignis Tapped. Der typische Ort zum Verknüpfen von Handlern ist entweder Loaded für eine Seite oder OnApplyTemplate für ein Steuerelement mit Vorlagen.

void MyControl::MyPointerPressedHandler(
    winrt::Windows::Foundation::IInspectable const &sender,
    winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e) {
  // implementation..
}

this->AddHandler(
    winrt::Windows::UI::Xaml::UIElement::PointerPressedEvent(),
    winrt::box_value(winrt::Windows::UI::Xaml::Input::PointerEventHandler(this, &MyControl::MyPointerPressedHandler)),
    true);

// Or passing the handler as a lambda, instead of a member function:
this->AddHandler(
    winrt::Windows::UI::Xaml::UIElement::PointerPressedEvent(),
    winrt::box_value(winrt::Windows::UI::Xaml::Input::PointerEventHandler(
      [=](auto &&, winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const &args) {
      // ...
    })),
    true);    
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);
}
Private Sub Page_Tapped(sender As Object, e As TappedRoutedEventArgs)
    ' implementation
End Sub
Private Sub Page_Loaded_1(sender As Object, e As RoutedEventArgs)
    Me.AddHandler(UIElement.TappedEvent, New TappedEventHandler(AddressOf Page_Tapped), True)
End Sub

Hinweise

Versuchen Sie nicht, AddHandler als allgemeinen Ersatz für die sprachspezifische Syntax zu verwenden, die Sie normalerweise zum Verkabeln von Ereignishandlern verwenden. Dies funktioniert nicht, da nicht alle Ereignisse über einen Bezeichner verfügen, den Sie als routedEvent übergeben können. AddHandler ist speziell für Routingereignisse gedacht und hauptsächlich für das jeweilige Szenario vorgesehen, das durch übergeben von handledEventsToo als true aktiviert wird. Weitere Informationen finden Sie unter Übersicht über Ereignisse und Routingereignisse.

Routingereignisbezeichner

Der Bezeichner des Routingereignisses ist im Allgemeinen ein statisches Eigenschaftselement von UIElement. Um beispielsweise einen Handler für das KeyUp-Ereignis hinzuzufügen, übergeben Sie KeyUpEvent für diesen Parameter. Nur eine kleine Anzahl von Windows-Runtime Ereignissen verfügt über diesen Bezeichner. Nur routingfähige Ereignisse auf UIElement verfügen über eine Bezeichner-API für diese Verwendung. Dies sind im Allgemeinen Ereignisse, die sich auf Eingabeaktionen auf verschiedenen Ebenen beziehen: Zeigerebene, Gestenebene, Bearbeitungsebene. Außerdem können die Schlüsseleingabeereignisse auf diese Weise behandelt werden.

Im Folgenden finden Sie eine Liste von Routingereignissen, die einen Routingereignisbezeichner verfügbar machen und daher von Handlern verarbeitet werden können, die durch einen AddHandler-Aufruf registriert werden:

Der Handlerparameter

Der Handlerparameter ist ein nicht typisierter Parameter, Sie sollten jedoch einen neuen Delegaten bereitstellen, der auf eine Handlermethode verweist, die für das gewünschte Ereignis spezifisch ist. Wenn Sie beispielsweise ein KeyUp-Ereignis behandeln, übergeben Sie einen neuen KeyEventHandler-instance, der auf eine Methode verweist, die auf dieser KeyEventHandler-Delegatensignatur basiert. Dies erfordert eine Dereferenzierung, und die Dereferenzierungssyntax variiert je nach verwendeter Sprache. Sehen Sie sich die Beispiele in diesem Thema an.

Verwendung von handledEventsToo

Die praktische Verarbeitung von Eingabeereignissen auf niedriger Ebene ist eine komplexe Aufgabe. Viele Steuerelemente implementieren Verhalten, bei dem ein bestimmtes Ereignis als behandelt markiert und durch ein weiteres intuitiveres Ereignis ersetzt wird. Im Allgemeinen markiert ein Steuerelement ein Routingereignis nur dann als behandelt, wenn dies entwurfsbedingt beabsichtigt ist. In bestimmten Szenarien sind diese Entwurfsabsichten jedoch möglicherweise nicht das, was Ihre spezielle Behandlung des Eingabeereignisses erfordert. Für diese Szenarien ist die Registrierung von Handlern bei handledEventsToo als true geeignet. Aber Sie sollten dies nicht routinemäßig tun. Das Aufrufen von Handlern als Reaktion auf alle Ereignisse, auch wenn sie behandelt werden, erschwert ihre eigene App-Ereignisverarbeitungslogik. Es kann zu einer Leistungsminderung führen, wenn die Handlerlogik erheblich ist. Sie sollten Handler nur an bereits behandelte Ereignisse anfügen, wenn Sie festgestellt haben, dass bestimmte Steuerelemente Ereignisse behandeln, die Sie mit App-Logik behandeln möchten.

Eine weitere Technik zum Vermeiden des Klassenbehandlungsverhaltens eines Steuerelements besteht darin, eine Unterklasse zu verwenden, die die OnEvent-Methoden steuert und überschreibt. Dabei handelt es sich um vorkonfigurierte Außerkraftsetzungen, mit denen das Steuerelement ein Ereignis als behandelt markiert. Aber auch dies kann komplex sein. Möglicherweise müssen Sie die Verarbeitungsimplementierung eines Steuerelements reproduzieren, ohne die Basisimplementierung aufzurufen, da die Basisimplementierung das Ereignis als behandelt markiert. Weitere Informationen finden Sie unter Übersicht über Ereignisse und Routingereignisse.

Gilt für:

Weitere Informationen