Visual Basic- und WPF-EreignisbehandlungVisual Basic and WPF Event Handling

Speziell für die Microsoft Visual Basic .NET-Sprache können Sie das sprachspezifische Handles Schlüsselwort verwenden, um Ereignishandler Instanzen zuzuordnen, anstatt Ereignishandler mit Attributen anzufügen oder die AddHandler -Methode zu verwenden.For the Microsoft Visual Basic .NET language specifically, you can use the language-specific Handles keyword to associate event handlers with instances, instead of attaching event handlers with attributes or using the AddHandler method. Allerdings weist die Handles-Technik für das Anfügen von Handlern an Instanzen einige Einschränkungen auf, da die Handles-Syntax einige der spezifischen Funktionen von Routingereignissen des WPFWPF-Ereignissystems nicht unterstützt.However, the Handles technique for attaching handlers to instances does have some limitations, because the Handles syntax cannot support some of the specific routed event features of the WPFWPF event system.

Verwenden von „Handles“ in einer WPF-AnwendungUsing "Handles" in a WPF Application

Die Ereignishandler, die über Handles mit Instanzen und Ereignissen verbunden sind, müssen alle innerhalb der partiellen Klassendefinition der Instanz definiert sein, die auch eine Anforderung für Ereignishandler darstellt, die über Attributwerte für Elemente zugewiesen werden.The event handlers that are connected to instances and events with Handles must all be defined within the partial class declaration of the instance, which is also a requirement for event handlers that are assigned through attribute values on elements. Sie können nur für Handles ein Element auf der Seite angeben, das über Name einen Eigenschafts Wert (oder eine x:Name-Direktive deklariert) verfügt.You can only specify Handles for an element on the page that has a Name property value (or x:Name Directive declared). Dies liegt daran, Name dass XAMLXAML der in den Instanzverweis erstellt, der zur Unterstützung des von der Handles Syntax erforderlichen instanzverweisverweisformats erforderlich istThis is because the Name in XAMLXAML creates the instance reference that is necessary to support the Instance.Event reference format required by the Handles syntax. Das einzige Element, das für Handles Name ohne Verweis verwendet werden kann, ist die Stamm Element Instanz, die die partielle Klasse definiert.The only element that can be used for Handles without a Name reference is the root-element instance that defines the partial class.

Sie können mehreren Elemente den gleichen Handler zuweisen, indem Sie Instance.Event-Verweise nach Handles durch Kommas trennen.You can assign the same handler to multiple elements by separating Instance.Event references after Handles with commas.

Sie können Handles dazu nutzen, um dem gleichen Instance.Event-Verweis mehr als einen Handler zuzuweisen.You can use Handles to assign more than one handler to the same Instance.Eventreference. Bemessen Sie der Reihenfolge, in der Handler im Handles-Verweis gegeben werden, keine Wichtigkeit zu. Sie können davon ausgehen, dass Handler, die dasselbe Ereignis behandlen, in beliebiger Reihenfolge aufgerufen werden können.Do not assign any importance to the order in which handlers are given in the Handles reference; you should assume that handlers that handle the same event can be invoked in any order.

Um einen Handler zu entfernen, der Handles in der-Deklaration hinzugefügt wurde, RemoveHandlerkönnen Sie den Befehl.To remove a handler that was added with Handles in the declaration, you can call RemoveHandler.

Mithilfe von Handles können Sie Handler für Routingereignisse anfügen, solange Sie Handler an Instanzen anfügen, die das behandelte Ereignis in ihren Membertabellen definieren.You can use Handles to attach handlers for routed events, so long as you attach handlers to instances that define the event being handled in their members tables. Für Routing Ereignisse folgen Handler, die mit Handles verbunden sind, denselben Routing Regeln wie Handler, die als XAMLXAML Attribute angefügt sind, oder mit der allgemeinen Signatur von AddHandler.For routed events, handlers that are attached with Handles follow the same routing rules as do handlers that are attached as XAMLXAML attributes, or with the common signature of AddHandler. Dies bedeutet Folgendes: Wenn das Ereignis bereits als behandelt markiert ist Handled (die-Eigenschaft in den TrueEreignisdaten ist), werden Handler Handles , die mit verbunden sind, nicht als Antwort auf diese Ereignis Instanz aufgerufen.This means that if the event is already marked handled (the Handled property in the event data is True), then handlers attached with Handles are not invoked in response to that event instance. Das Ereignis kann von Instanzhandlern auf ein anderes Element in der Route oder von der Klassenbehandlung für das aktuelle Element oder frühere Elemente entlang der Route als behandelt markiert werden.The event could be marked handled by instance handlers on another element in the route, or by class handling either on the current element or earlier elements along the route. Für Eingabeereignisse, die gekoppelte Tunneling-/Bubblingereignisse unterstützen, kann die Tunnelingroute das Ereignispaar als behandelt markiert haben.For input events that support paired tunnel/bubble events, the tunneling route may have marked the event pair handled. Weitere Informationen zu Routingereignissen finden Sie unter Übersicht über Routingereignisse.For more information about routed events, see Routed Events Overview.

Einschränkungen von „Handles“ beim Hinzufügen von HandlernLimitations of "Handles" for Adding Handlers

Handles kann für angefügte Ereignisse nicht auf Handler verweisen.Handles cannot reference handlers for attached events. Verwenden Sie die add-Accessormethode für das angefügte Ereignis oder typename.eventname-Ereignisattribute in XAMLXAML.You must use the add accessor method for that attached event, or typename.eventname event attributes in XAMLXAML. Weitere Informationen finden Sie unter Übersicht über Routingereignisse.For details, see Routed Events Overview.

Für Routingereignisse können Sie nur Handles dazu verwenden, um Handler für Instanzen zuzuweisen, auf denen das Ereignis in der Instanzmembertabelle vorhanden ist.For routed events, you can only use Handles to assign handlers for instances where that event exists in the instance members table. Mit Routingereignissen kann ein übergeordnetes Element aber im Allgemeinen ein Listener für ein Ereignis aus untergeordneten Elementen sein, selbst wenn dieses Ereignis nicht in der Membertabelle des übergeordneten Elements vorkommt.However, with routed events in general, a parent element can be a listener for an event from child elements, even if the parent element does not have that event in its members table. In der Attributsyntax können Sie dies über die typename.membername-Attributform angeben, die beschreibt, welcher Typ tatsächlich das zu behandlende Ereignis definiert.In attribute syntax, you can specify this through a typename.membername attribute form that qualifies which type actually defines the event you want to handle. Beispielsweise kann ein über Page geordnetes Element ( Click ohne Ereignis definiert) auf Schaltflächen Klick Ereignisse lauschen, indem ein Attribut Handler im Formular Button.Clickzugewiesen wird.For instance, a parent Page (with no Click event defined) can listen for button-click events by assigning an attribute handler in the form Button.Click. Handles unterstützt aber nicht die Form typename.membername, da es eine in Konflikt stehende Instance.Event-Form unterstützen muss.But Handles does not support the typename.membername form, because it must support a conflicting Instance.Event form. Weitere Informationen finden Sie unter Übersicht über Routingereignisse.For details, see Routed Events Overview.

Handles kann keine Handler anfügen, die für Ereignisse aufgerufen werden, die bereits als behandelt markiert sind.Handles cannot attach handlers that are invoked for events that are already marked handled. Stattdessen müssen Sie Code verwenden und die handledEventsToo -über AddHandler(RoutedEvent, Delegate, Boolean)Ladung aufrufen.Instead, you must use code and call the handledEventsToo overload of AddHandler(RoutedEvent, Delegate, Boolean).

Hinweis

Verwenden Sie die Handles Syntax nicht in Visual Basic Code, wenn Sie einen Ereignishandler für das gleiche Ereignis in XAML angeben.Do not use the Handles syntax in Visual Basic code when you specify an event handler for the same event in XAML. In diesem Fall wird der Ereignishandler zweimal aufgerufen.In this case, the event handler is called twice.

So implementiert WPF die „Handles“-FunktionalitätHow WPF Implements "Handles" Functionality

Wenn eine Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) Seite kompiliert wird, deklariert WithEvents Friend die zwischen Datei Verweise auf jedes Element auf der Seite, das über Name einen Eigenschaften Satz (oder eine x:Name-Direktive deklariert) verfügt.When a Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) page is compiled, the intermediate file declares Friend WithEvents references to every element on the page that has a Name property set (or x:Name Directive declared). Jede benannte Instanz ist potenziell ein Element, das an einem Handler mit Handles zugewiesen werden kann.Each named instance is potentially an element that can be assigned to a handler through Handles.

Hinweis

In kann IntelliSense Ihnen den Abschluss zeigen, auf den Elemente für einen Handles Verweis in einer Seite verfügbar sind. Microsoft Visual StudioMicrosoft Visual StudioWithin Microsoft Visual StudioMicrosoft Visual Studio, IntelliSense can show you completion for which elements are available for a Handles reference in a page. Dies kann jedoch einen Kompilierungsschritt dauern, sodass die Zwischendatei alle Friends-Verweise auffüllen kann.However, this might take one compile pass so that the intermediate file can populate all the Friends references.

Siehe auchSee also