Dela via


Visual Basic- och WPF-händelsehantering (WPF .NET)

Om du kodar i Visual Basic .NET kan du använda det språkspecifika Hanterar nyckelord för att koppla en händelsehanterare till ett objekt. Objektet kan vara en instans i kod bakom eller ett element i XAML (Extensible Application Markup Language). Handles kan användas för att tilldela händelsehanterare för CLR-händelser (Common Language Runtime) eller Windows Presentation Foundation (WPF) dirigerade händelser. Men Handles har vissa användningsbegränsningar när de används för att koppla händelsehanterare för routade händelser.

Förutsättningar

Artikeln förutsätter grundläggande kunskaper om routade händelser och att du har läst Översikt över routade händelser. Om du vill följa exemplen i den här artikeln hjälper det om du är bekant med XAML (Extensible Application Markup Language) och vet hur du skriver WPF-program (Windows Presentation Foundation).

Syntax

Syntaxen för en Sub-deklaration som använder nyckelordet Handles är: Sub <procedure name> Handles <object name>.<event name>. Den syntaxen anger en procedur som den händelsehanterare som ska köras när en händelse som anges av <event name> aktiveras på ett objekt som anges av <object name>. Händelsen måste vara medlem i objektets klass eller basklass. I följande exempel visas hur du kopplar en händelsehanterare till ett XAML-element med hjälp av 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

Om du vill använda Handles med ett objekt som definierats i kod bakom deklarerar du vanligtvis objektet med hjälp av nyckelordet WithEvents. För mer information om användningen av WithEvents, se dessa exempel. WPF deklarerar automatiskt alla XAML-element med hjälp av Friend WithEvents. I följande exempel visas hur du deklarerar ett objekt som definierats i code-behind med hjälp av 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

Kommaavgränsa <object name>.<event name> händelser om du vill använda samma hanterare för flera händelser. Till exempel Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. Ordningen på kommaavgränsade händelser är oväsentlig.

Du kan tilldela olika hanterare för samma händelse med flera Handles-instruktioner. Ordningen på Handles-uttrycken avgör inte i vilken ordning hanterare anropas när händelsen inträffar.

Tips

Om du vill ta bort en hanterare som har lagts till med Handlesanropar du RemoveHandler. Till exempel RemoveHandler Button1.Click, AddressOf Button1_Click.

Använda "Handles" i ett WPF-program

För ett objekt som definierats i XAML kräver Hanterar händelsesyntax <object name>.<event name> XAML-elementet som representerar objektet för att ha en Name eller x:Name-egenskap. En namnegenskap krävs dock inte för XAML-sidrotelementet, för vilket du kan använda namnet Me. I följande exempel visas hur du kopplar en händelsehanterare till en XAML-sidrot med hjälp av 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

När en XAML-sida kompileras deklareras varje XAML-element med en Name- eller x:Name-parameter som Friend WithEvents. Därför kan du använda valfritt XAML-element med Handles.

Tips

Visual Studio IntelliSense visar de objekt som kan användas med Handles.

Oavsett om du kopplar en händelsehanterare med Handles, XAML-attributsyntax, instruktionen AddHandler eller metoden AddHandler är händelsesystemets beteende detsamma.

Anteckning

Använd inte både XAML-attribut och Handles för att koppla samma händelsehanterare till samma händelse, annars anropas händelsehanteraren två gånger för varje händelse.

Begränsningar

Nyckelordet Handles har följande användningsbegränsningar:

  • Du kan bara använda Handles för att koppla en händelsehanterare till ett objekt om händelsen är medlem i objektets klass eller basklass. Du kan till exempel använda Handles för att koppla en Click händelsehanterare till en knapp vars basklass ButtonBase genererar den Click dirigerade händelsen. Dock är en av egenskaperna hos riktade händelser att de traverserar elementträdet, vilket gör det möjligt att lyssna på och hantera en Click händelse på en högre nivå än det element som utlöste den. En dirigerad händelse som ett förälderelement lyssnar på och hanterar kallas för en bifogad händelse. Handles kan inte användas för anslutna händelser eftersom dess syntax inte stöder att ange en annan lyssnare i XAML-elementträdet än elementet som skapade händelsen. Om du vill tilldela händelsehanterare för anslutna händelser måste du använda antingen XAML-attributsyntax eller metoden AddHandler. Mer information om bifogade händelser finns i översikten över kopplade händelser och Kopplade händelser i WPF.

  • Handles syntax stöder inte händelsehanteraranrop för Handled händelser. Om du vill att händelsehanteraren ska anropas för Handled händelser kopplar du händelsehanteraren med hjälp av metoden AddHandler(RoutedEvent, Delegate, Boolean) och anger parametern handledEventsToo till true.

Se även