Delen via


Afhandeling van Visual Basic- en WPF-gebeurtenissen (WPF .NET)

Als u codeert in Visual Basic .NET, kunt u de taalspecifieke Handles trefwoord gebruiken om een gebeurtenis-handler aan een object toe te voegen. Het object kan een exemplaar zijn in code-behind of een element in Extensible Application Markup Language (XAML). Handles kan worden gebruikt om gebeurtenishandlers toe te wijzen voor gebeurtenissen van de Common Language Runtime (CLR) of voor gerouteerde gebeurtenissen van Windows Presentation Foundation (WPF) . Handles heeft echter enkele beperkingen bij het gebruik om gebeurtenis-handlers voor gerouteerde gebeurtenissen bij te voegen.

Voorwaarden

In het artikel wordt ervan uitgegaan dat u basiskennis hebt van gerouteerde gebeurtenissen en dat u overzicht van gerouteerde gebeurtenissen hebt gelezen. Als u de voorbeelden in dit artikel wilt volgen, helpt dit als u bekend bent met Extensible Application Markup Language (XAML) en weet hoe u WPF-toepassingen (Windows Presentation Foundation) schrijft.

Syntaxis

De syntaxis voor een Sub-declaratie die gebruikmaakt van het trefwoord handles is: Sub <procedure name> Handles <object name>.<event name>. Deze syntaxis wijst een procedure aan als de gebeurtenis-handler die wordt uitgevoerd wanneer een gebeurtenis die is opgegeven door <event name> wordt gegenereerd op een object dat is opgegeven door <object name>. De gebeurtenis moet lid zijn van de klasse of basisklasse van het object. In het volgende voorbeeld ziet u hoe u een gebeurtenis-handler koppelt aan een XAML-element met behulp van Handles.

' Click event handler attached to XamlButton using Handles.
Private Sub XamlButton_Click(sender As Object, e As RoutedEventArgs) Handles XamlButton.Click

    ' Handler logic.
    Debug.WriteLine($"Click event handler attached to XamlButton using Handles.")

End Sub

Als u Handles wilt gebruiken met een object dat is gedefinieerd in codeachter, declareert u het object meestal met behulp van het WithEvents trefwoord. Zie deze voorbeeldenvoor meer informatie over WithEvents gebruik. WPF declareert automatisch alle XAML-elementen met behulp van Friend WithEvents. In het volgende voorbeeld ziet u hoe u een object declareert dat is gedefinieerd in code-behind met behulp van WithEvents.

' Declare a new button using WithEvents.
Dim WithEvents CodeButton As New Button With {
    .Content = "New button",
    .Background = Brushes.Yellow
}

' Click event handler attached to CodeButton using Handles.
Private Sub CodeButton_Click(sender As Object, e As RoutedEventArgs) Handles CodeButton.Click

    ' Handler logic.
    Debug.WriteLine($"Click event handler attached to CodeButton using Handles.")

End Sub

Als u dezelfde handler wilt gebruiken voor meerdere gebeurtenissen, scheidt u de <object name>.<event name> gebeurtenissen door komma's. Bijvoorbeeld Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. De volgorde van de door komma's gescheiden gebeurtenissen is immateriƫle.

U kunt verschillende handlers toewijzen voor dezelfde gebeurtenis met meerdere Handles instructies. De volgorde van de Handles-instructies bepaalt niet de volgorde waarin handlers worden aangeroepen wanneer de gebeurtenis plaatsvindt.

Fooi

Als u een handler wilt verwijderen die is toegevoegd met Handles, roept u RemoveHandler-aan. Bijvoorbeeld RemoveHandler Button1.Click, AddressOf Button1_Click.

Handles gebruiken in een WPF-toepassing

Voor een object dat is gedefinieerd in XAML, vereist de gebeurtenissyntaxis <object name>.<event name> dat het XAML-element dat het object vertegenwoordigt een eigenschap Name of de eigenschap x:Name heeft. Een naameigenschap is echter niet vereist voor het hoofdelement van de XAML-pagina, waarvoor u de naam Mekunt gebruiken. In het volgende voorbeeld ziet u hoe u een gebeurtenis-handler koppelt aan een XAML-paginawortel met Handles.

' Loaded event handler attached to the XAML page root using Handles.
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded

    ' Handler logic.
    Debug.WriteLine($"Loaded event handler attached to Window using Handles.")

End Sub

Wanneer een XAML-pagina wordt gecompileerd, wordt elk XAML-element met een Name of x:Name parameter gedeclareerd als Friend WithEvents. Als gevolg hiervan kunt u elk XAML-element gebruiken met Handles.

Tip

Visual Studio IntelliSense toont de objecten die kunnen worden gebruikt met Handles.

Ongeacht of u een gebeurtenishandler koppelt met behulp van Handles, de syntaxis van het XAML-kenmerk, de AddHandler-instructie of de AddHandler methode, is het gedrag van het gebeurtenissysteem hetzelfde.

Notitie

Gebruik niet beide XAML-kenmerken en Handles om dezelfde gebeurtenishandler aan dezelfde gebeurtenis te koppelen, anders wordt de gebeurtenis-handler twee keer voor elke gebeurtenis aangeroepen.

Beperkingen

De verwerkt trefwoord heeft deze gebruiksbeperkingen:

  • U kunt alleen Handles gebruiken om een gebeurtenishandler aan een object toe te voegen als de gebeurtenis lid is van de klasse of basisklasse van het object. U kunt bijvoorbeeld Handles gebruiken om een Click-gebeurtenishandler toe te voegen aan een knop waarvan de basisklasse ButtonBase het Click-gerouteerde evenement genereert. Een van de functies van gerouteerde gebeurtenissen is dat ze de elementstructuur doorlopen, waardoor het mogelijk is om een Click gebeurtenis op een hoger niveau waar te nemen en af te handelen dan het element dat het heeft opgewekt. Een gerouteerde gebeurtenis waar een ouder element naar luistert en die het verwerkt, wordt een gekoppelde gebeurtenisgenoemd. Handles kan niet worden gebruikt voor gekoppelde gebeurtenissen omdat de syntaxis geen ondersteuning biedt voor het opgeven van een andere listener in de XAML-elementstructuur dan het element dat de gebeurtenis heeft gegenereerd. Als u gebeurtenis-handlers wilt toewijzen voor gekoppelde gebeurtenissen, moet u de syntaxis van het XAML-kenmerk of de AddHandler-methode gebruiken. Zie Overzicht van gekoppelde gebeurtenissen en gekoppelde gebeurtenissen in WPF-voor meer informatie over gekoppelde gebeurtenissen.

  • Handles syntaxis biedt geen ondersteuning voor aanroep van gebeurtenishandlers voor Handled gebeurtenissen. Als u wilt dat uw gebeurtenis-handler kan worden aangeroepen voor Handled gebeurtenissen, koppelt u de gebeurtenis-handler met behulp van de methode AddHandler(RoutedEvent, Delegate, Boolean) en stelt u de bijbehorende handledEventsToo parameter in op true.

Zie ook