UIElement.AddHandler(RoutedEvent, Object, Boolean) Methode

Definition

Fügt einen Routingereignishandler für ein angegebenes Routingereignis hinzu, und fügt den Handler der Handlerauflistung für das aktuelle Element hinzu. Geben Sie an handledEventsToo , dass true der bereitgestellte Handler aufgerufen werden soll, 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 routingfähige Ereignis, das behandelt werden soll.

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 routingfähige Ereignis in den Ereignisdaten behandelt wird.

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

Bitten Sie nicht routinemäßig, ein routingfähiges Ereignis neu zuhanden, da es den beabsichtigten Entwurf des Windows-Runtime Ereignissystems für die Steuerungskomositing beeinträchtigt.

Beispiele

Dieses Beispiel zeigt die grundlegende Syntax für die Verkabelung eines Ereignishandlers mit AddHandler und handledEventsToo als true. In diesem Fall wird auf das verkabelte Ereignis getippt. Der typische Ort für Drahthandler ist entweder geladen für eine Seite oder OnApplyTemplate für ein vorlagenbasiertes Steuerelement.

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);
}

Hinweise

Versuchen Sie nicht, als allgemeiner Ersatz für die sprachspezifische Syntax zu verwenden AddHandler , die Sie normalerweise für die Verkabelung von Ereignishandlern verwenden. Es funktioniert nicht, da nicht alle Ereignisse einen Bezeichner aufweisen, den Sie als routedEventübergeben können. AddHandlerist speziell für Routingereignisse vorgesehen und hauptsächlich für das jeweilige Szenario vorgesehen, das durch Übergeben als true.handledEventsToo Weitere Informationen finden Sie unter Übersicht über Ereignisse und Routingereignisse.

Routingereignisbezeichner

Der Routingereignisbezeichner ist in der Regel 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 Routingereignisse auf UIElement sind für diese Verwendung über eine Bezeichner-API verfügbar. Dies sind im Allgemeinen Ereignisse, die mit Eingabeaktionen auf verschiedenen Ebenen zusammenhängen: Zeigerebene, Gestikebene, Manipulationsebene. Außerdem können die Tasteneingabeereignisse auf diese Weise behandelt werden.

Nachfolgend finden Sie eine Liste von Routingereignissen, die einen Routingereignisbezeichner verfügbar machen und somit von Handlern verarbeitet werden können, die von einem AddHandler Aufruf registriert werden:

Der Handlerparameter

Der handler Parameter 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 eine neue KeyEventHandler-Instanz , die auf eine Methode verweist, die auf dieser KeyEventHandler Delegatensignatur basiert. Dies erfordert eine Ableitung, und die Ableitungssyntax variiert je nachdem, welche Sprache Sie verwenden. Weitere Informationen finden Sie in den Beispielen in diesem Thema.

Verwendung von handledEventsToo

Die Verarbeitung von Eingabeereignissen auf niedriger Ebene auf praktische Weise ist eine komplexe Aufgabe. Viele Steuerelemente implementieren Verhalten, bei dem ein bestimmtes Ereignis als behandelt markiert wird und durch ein anderes intuitiveres Ereignis ersetzt wird. Im Allgemeinen kennzeichnet ein Steuerelement ein routingfähiges Ereignis nur dann als behandelt, wenn dies beabsichtigt ist. In bestimmten Szenarien sind diese Entwurfsabsichten jedoch möglicherweise nicht das, was Ihre spezielle Behandlung des Eingabeereignisses erfordert. Dies gilt für diese Szenarien, in denen Handler handledEventsToo entsprechend true registriert werden. Aber sie sollten dies nicht routinemäßig tun. Das Aufrufen von Handlern als Reaktion auf alle Ereignisse, auch wenn die Verarbeitung erfolgt, erschwert Ihre eigene App-Ereignisverarbeitungslogik. Möglicherweise wird eine Leistungsminderung angezeigt, wenn die Handlerlogik erheblich ist. Sie sollten Handler nur dann an bereits behandelte Ereignisse anfügen, wenn Sie festgestellt haben, dass bestimmte Steuerelemente Ereignisse behandeln, die Sie mit Der App-Logik behandeln möchten.

Ein weiteres Verfahren zum Vermeiden des Klassenbehandlungsverhaltens eines Steuerelements besteht darin, Unterklassen zu unterklassen, die die OnEvent-Methoden steuern und außer Kraft setzen, bei denen es sich um vorkonfigurierte Außerkraftsetzungen handelt, mit denen das Steuerelement ein Ereignis als behandelt markiert. Dies kann jedoch auch komplex sein. Möglicherweise müssen Sie die Verarbeitungsimplementierung eines Steuerelements reproduzieren, ohne die Basisimplementierung aufzurufen, da die Basisimplementierung das Ereignis als behandelt markieren würde. Weitere Informationen finden Sie unter Übersicht über Ereignisse und Routingereignisse.

Gilt für:

Weitere Informationen