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 Friend
WithEvents
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 Handles
aan 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
.NET Desktop feedback