Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt een gebeurtenishandler toewijzen aan een element in Windows Presentation Foundation (WPF) met behulp van markeringen of code-behind. Hoewel het gebruikelijk is om een gebeurtenishandler toe te wijzen in Extensible Application Markup Language (XAML), moet u soms een gebeurtenis-handler toewijzen in code-behind. Gebruik bijvoorbeeld code wanneer:
- Je wijst een gebeurtenishandler toe aan een element nadat de markeringspagina die het element bevat is geladen.
- U voegt een element toe en wijst de event handler toe nadat de markeringspagina die het element bevat is geladen.
- U definieert de elementstructuur voor uw toepassing volledig in code.
Vereiste 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 voor gebeurtenishandlertoewijzing
C# ondersteunt toewijzing van gebeurtenis-handler met behulp van:
- De
+=-operator, die ook wordt gebruikt in het COMMON LANGUAGE Runtime-gebeurtenisafhandelingsmodel (CLR). - De methode UIElement.AddHandler.
VB ondersteunt toewijzing van gebeurtenishandler door:
- De instructie AddHandler met de operator AddressOf, die ook in het CLR-gebeurtenisafhandelingsmodel wordt gebruikt.
- Het verwerkt trefwoord in de definitie van de gebeurtenishandler. Zie Visual Basic- en WPF-gebeurtenisafhandelingvoor meer informatie.
- De methode UIElement.AddHandler, samen met de operator
AddressOfvoor verwijzing naar de event handler.
Voorbeeld
In het volgende voorbeeld wordt de XAML-syntaxis gebruikt om een Button genaamd ButtonCreatedByXaml te definiëren en de ButtonCreatedByXaml_Click-methode toe te wijzen als de Click-eventhandler.
Click is een ingebouwde routed event voor knoppen die zijn afgeleid van ButtonBase.
<StackPanel Name="StackPanel1">
<Button
Name="ButtonCreatedByXaml"
Click="ButtonCreatedByXaml_Click"
Content="Create a new button with an event handler"
Background="LightGray">
</Button>
</StackPanel>
In het voorbeeld wordt code-behind gebruikt om de ButtonCreatedByXaml_Click- en ButtonCreatedByCode_Click-handlers te implementeren en de ButtonCreatedByCode_Click handler toe te wijzen aan de ButtonCreatedByCode- en StackPanel1-elementen. Methoden voor gebeurtenis-handlers kunnen alleen worden geïmplementeerd in code-behind.
// The click event handler for the existing button 'ButtonCreatedByXaml'.
private void ButtonCreatedByXaml_Click(object sender, RoutedEventArgs e)
{
// Create a new button.
Button ButtonCreatedByCode = new();
// Specify button properties.
ButtonCreatedByCode.Name = "ButtonCreatedByCode";
ButtonCreatedByCode.Content = "New button and event handler created in code";
ButtonCreatedByCode.Background = Brushes.Yellow;
// Add the new button to the StackPanel.
StackPanel1.Children.Add(ButtonCreatedByCode);
// Assign an event handler to the new button using the '+=' operator.
ButtonCreatedByCode.Click += new RoutedEventHandler(ButtonCreatedByCode_Click);
// Assign an event handler to the new button using the AddHandler method.
// AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(ButtonCreatedByCode_Click);
// Assign an event handler to the StackPanel using the AddHandler method.
StackPanel1.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(ButtonCreatedByCode_Click));
}
// The Click event handler for the new button 'ButtonCreatedByCode'.
private void ButtonCreatedByCode_Click(object sender, RoutedEventArgs e)
{
string sourceName = ((FrameworkElement)e.Source).Name;
string senderName = ((FrameworkElement)sender).Name;
Debug.WriteLine($"Routed event handler attached to {senderName}, " +
$"triggered by the Click routed event raised by {sourceName}.");
}
' The click event handler for the existing button 'ButtonCreatedByXaml'.
Private Sub ButtonCreatedByXaml_Click(sender As Object, e As RoutedEventArgs)
' Create a new button and specify button properties.
Dim ButtonCreatedByCode As New Button With {
.Name = "ButtonCreatedByCode",
.Content = "New button and event handler created in code",
.Background = Brushes.Yellow
}
' Add the new button to the StackPanel.
StackPanel1.Children.Add(ButtonCreatedByCode)
' Assign an event handler to the new button using the AddHandler statement.
AddHandler ButtonCreatedByCode.Click, AddressOf ButtonCreatedByCode_Click
' Assign an event handler to the new button using the AddHandler method.
' ButtonCreatedByCode.AddHandler(ButtonBase.ClickEvent, New RoutedEventHandler(AddressOf ButtonCreatedByCode_Click))
' Assign an event handler to the StackPanel using the AddHandler method.
StackPanel1.AddHandler(ButtonBase.ClickEvent, New RoutedEventHandler(AddressOf ButtonCreatedByCode_Click))
End Sub
' The Click event handler for the new button 'ButtonCreatedByCode'.
Private Sub ButtonCreatedByCode_Click(sender As Object, e As RoutedEventArgs)
Dim sourceName As String = CType(e.Source, FrameworkElement).Name
Dim senderName As String = CType(sender, FrameworkElement).Name
Debug.WriteLine($"Routed event handler attached to {senderName}, " +
$"triggered by the Click routed event raised by {sourceName}.")
End Sub
Wanneer ButtonCreatedByXaml wordt aangeklikt en zijn eventhandler wordt uitgevoerd, gebeurt ButtonCreatedByXaml_Click programmatisch.
- Hiermee voegt u een nieuwe knop met de naam
ButtonCreatedByCodetoe aan de reeds gebouwde XAML-elementstructuur. - Hiermee geeft u eigenschappen op voor de nieuwe knop, zoals de naam, inhoud en achtergrondkleur.
- Wijst de
ButtonCreatedByCode_Clickeventhandler toe aanButtonCreatedByCode. - Wijst dezelfde
ButtonCreatedByCode_Clickgebeurtenis-handler toe aanStackPanel1.
Wanneer op ButtonCreatedByCode wordt geklikt:
- De Click gerouteerde gebeurtenis wordt opgeroepen op
ButtonCreatedByCode. - De
ButtonCreatedByCode_Clickgebeurtenis-handler die is toegewezen aanButtonCreatedByCodewordt geactiveerd. - De
Clickgerouteerde gebeurtenis beweegt zich omhoog door de elementenboom naarStackPanel1. - De
ButtonCreatedByCode_Clickgebeurtenis-handler die is toegewezen aanStackPanel1wordt geactiveerd. - De
Clickgerouteerde gebeurtenis gaat verder omhoog in de elementenboom, wat mogelijk andereClickgebeurtenishandlers activeert die zijn toegewezen aan andere doorgelopen elementen.
De ButtonCreatedByCode_Click gebeurtenis-handler verkrijgt de volgende informatie over de gebeurtenis die deze heeft geactiveerd:
- Het afzenderobject, het element waaraan de eventhandler is toegewezen. De
senderwordtButtonCreatedByCodede eerste keer dat de handler wordt uitgevoerd enStackPanel1de tweede keer. - Het RoutedEventArgs.Source-object, het element dat oorspronkelijk de gebeurtenis heeft gegenereerd. In dit voorbeeld is de
SourcealtijdButtonCreatedByCode.
Opmerking
Een belangrijk verschil tussen een gerouteerde gebeurtenis en een CLR-gebeurtenis is dat een gerouteerde gebeurtenis de elementstructuur doorkruist, op zoek naar handlers, terwijl een CLR-gebeurtenis niet de elementstructuur doorkruist en handlers alleen kunnen worden gekoppeld aan het bronobject dat de gebeurtenis heeft gegenereerd. Als gevolg hiervan kan een gerouteerde gebeurtenis sender elk doorkruist element in de elementstructuur zijn.
Zie Een aangepaste gerouteerde gebeurtenis maken en afhandelen voor meer informatie over het maken en afhandelen van gerouteerde gebeurtenissen
Zie ook
.NET Desktop feedback