Share via


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 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 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 routingfähige Ereignis in seinen Ereignisdaten behandelt markiert 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 regelmäßig, ein routingfähiges Ereignis erneut zu beheben, da es den beabsichtigten Entwurf des Windows-Runtime Ereignissystems für die Steuerungskomositing beeinträchtigt.

Beispiele

In diesem Beispiel wird die grundlegende Syntax für die Verdrahtung eines Ereignishandlers mit AddHandler und handledEventsToo als trueveranschaulicht. In diesem Fall wird das verkabelte Ereignis getippt. Der typische Ort für Verdrahtungshandler ist entweder Loaded 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, die sprachspezifische Syntax, die Sie normalerweise für die Verdrahtung von Ereignishandlern verwenden, als allgemeinen Ersatz zu verwenden AddHandler . Dies funktioniert nicht, da nicht alle Ereignisse über einen Bezeichner verfügen, den Sie als routedEventübergeben können. AddHandler ist speziell für routingfähige Ereignisse vorgesehen und ist hauptsächlich für das jeweilige Szenario vorgesehen, das durch übergeben handledEventsTootrueals aktiviert wird. 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 weitergeleitete 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 der routingbasierten Ereignisse, die einen Routingereignisbezeichner verfügbar machen und daher von Handlern verarbeitet werden können, die durch einen 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 einen neuen KeyEventHandler-instance, der auf eine Methode verweist, die auf dieser KeyEventHandler Delegatensignatur basiert. Dies erfordert einen Rückschluss, und die Dereferencesyntax 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 gekennzeichnet wird, und wird durch ein anderes intuitiveres Ereignis ersetzt. Im Allgemeinen markiert ein Steuerelement ein routingfähiges Ereignis nur dann als behandelt, wenn dafür eine Entwurfsabsicht besteht. In bestimmten Szenarien sind diese Entwurfsabsichten jedoch möglicherweise nicht das, was Ihre spezielle Behandlung des Eingabeereignisses erfordert. Für diese Szenarien wird die Registrierung von handledEventsToo Handlern bei true bedarfsgerecht ausgeführt. 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, das Steuerelement unterklasse zu unterklassen und die On-Ereignismethoden außer Kraft zu setzen, bei denen es sich um vorkonfigurierte Überschreibungen handelt, mit denen das Steuerelement ein Ereignis als behandelt markiert. Auch dies kann jedoch 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