Delen via


Verwerking van Visual Basic- en WPF-gebeurtenissen

Voor de .NET-taal van Microsoft Visual Basic kunt u het taalspecifieke Handles trefwoord gebruiken om gebeurtenis-handlers te koppelen aan exemplaren, in plaats van gebeurtenis-handlers te koppelen aan kenmerken of de methode AddHandler te gebruiken. De Handles techniek voor het koppelen van handlers aan exemplaren heeft echter enkele beperkingen, omdat de syntaxis van de Handles enkele van de specifieke gerouteerde gebeurtenisfuncties van het WPF-gebeurtenissysteem niet kan ondersteunen.

Handles gebruiken in een WPF-toepassing

De gebeurtenis-handlers die zijn verbonden met exemplaren en gebeurtenissen met Handles moeten allemaal worden gedefinieerd in de gedeeltelijke klassedeclaratie van het exemplaar. Dit is ook een vereiste voor gebeurtenis-handlers die worden toegewezen via kenmerkwaarden op elementen. U kunt alleen Handles opgeven voor een element op de pagina dat een Name eigenschapwaarde heeft (of waarvoor x:Name Directive is gedeclareerd). Dit komt doordat de Name in XAML de instantiereferentie maakt die nodig is ter ondersteuning van de Instance.Event verwijzingsindeling die is vereist voor de Handles syntaxis. Het enige element dat kan worden gebruikt voor Handles zonder Name-verwijzing, is het hoofdelementexemplaar dat de gedeeltelijke klasse definieert.

U kunt dezelfde handler toewijzen aan meerdere elementen door Instance.Event verwijzingen te scheiden na Handles met komma's.

U kunt Handles gebruiken om meer dan één handler toe te wijzen aan dezelfde Instance.Eventverwijzing. Wijs geen belang toe aan de volgorde waarin handlers in de Handles verwijzing worden gegeven; u moet aannemen dat handlers die dezelfde gebeurtenis verwerken, in elke volgorde kunnen worden aangeroepen.

Als u een handler wilt verwijderen die is toegevoegd met Handles in de declaratie, kunt u RemoveHandleraanroepen.

U kunt Handles gebruiken om handlers toe te voegen voor gerouteerde gebeurtenissen, zolang u de handlers koppelt aan instanties die de gebeurtenis in hun ledentabellen definiëren. Voor gerouteerde gebeurtenissen volgen handlers die zijn gekoppeld aan Handles dezelfde routeringsregels als handlers die zijn gekoppeld als XAML-kenmerken, of met de gemeenschappelijke handtekening van AddHandler. Dit betekent dat als de gebeurtenis al is gemarkeerd als afgehandeld (de eigenschap Handled in de gebeurtenis data True), handlers die zijn gekoppeld aan Handles niet worden aangeroepen in reactie op dat gebeurtenisvoorbeeld. De gebeurtenis kan worden gemarkeerd als afgehandeld door instantiehandlers bij een ander element in de route, of door klasseafhandeling op het huidige element of eerdere elementen langs de route. Voor invoergebeurtenissen die gekoppelde tunnel- en bellengebeurtenissen ondersteunen, kan het gebeurtenispaar door de tunnelroute als afgehandeld zijn gemarkeerd. Zie Overzicht van gerouteerde gebeurtenissenvoor meer informatie over gerouteerde gebeurtenissen.

Beperkingen van "handles" voor het toevoegen van handlers

Handles kan niet verwijzen naar handlers voor gekoppelde gebeurtenissen. U moet de add accessormethode gebruiken voor die gekoppelde gebeurtenis of typename.eventname gebeurteniskenmerken in XAML. Zie Overzicht van gerouteerde gebeurtenissenvoor meer informatie.

Voor routeringsevenementen kunt u alleen Handles gebruiken om handlers toe te wijzen voor instanties waar die gebeurtenis bestaat in de instantieleden-tabel. Met gerouteerde gebeurtenissen in het algemeen kan een bovenliggend element echter een listener zijn voor een gebeurtenis van onderliggende elementen, zelfs als het bovenliggende element deze gebeurtenis niet in de ledentabel heeft. In de kenmerksyntaxis kunt u dit opgeven via een typename.membername attribuutvorm die bepaalt welk type daadwerkelijk de gebeurtenis definieert die u wilt verwerken. Een ouder Page (zonder gedefinieerde Click gebeurtenis) kan bijvoorbeeld luisteren naar knopklikevenementen door een kenmerk-handler toe te wijzen in de vorm van Button.Click. Maar Handles biedt geen ondersteuning voor het formulier typename.membername, omdat het een conflicterend instance.event formulier moet ondersteunen. Zie Overzicht van gerouteerde gebeurtenissenvoor meer informatie.

Handles kan geen handlers koppelen die worden aangeroepen voor gebeurtenissen die al zijn gemarkeerd als afgehandeld. In plaats daarvan moet u code gebruiken en de handledEventsToo overbelasting van AddHandler(RoutedEvent, Delegate, Boolean)aanroepen.

Notitie

Gebruik de Handles syntaxis niet in Visual Basic-code wanneer u een gebeurtenis-handler opgeeft voor dezelfde gebeurtenis in XAML. In dit geval wordt de event handler twee keer aangeroepen.

Hoe WPF “Handles” functionaliteit implementeert

Wanneer een XAML-pagina (Extensible Application Markup Language) is gecompileerd, declareert het tussenliggende bestand FriendWithEvents verwijzingen naar elk element op de pagina waarop een Name eigenschap is ingesteld (of x:Naamrichtlijn gedeclareerd). Elk met naam aangeduid exemplaar is mogelijk een element dat via Handlesaan een handler kan worden toegewezen.

Notitie

In Visual Studio laat IntelliSense zien welke elementen beschikbaar zijn voor een Handles-referentie op een pagina. Dit kan echter één compilatiecyclus duren, opdat het tussenliggende bestand alle Friends-verwijzingen kan invullen.

Zie ook