Handleiding: Een aangepaste gerouteerde gebeurtenis maken
Als uw aangepaste gebeurtenis ondersteuning biedt voor gebeurtenisroutering, moet u een RoutedEvent registreren met behulp van de RegisterRoutedEvent methode. In dit voorbeeld ziet u de basisbeginselen van het maken van een aangepaste gerouteerde gebeurtenis.
Voorbeeld
Zoals in het volgende voorbeeld wordt weergegeven, registreert u eerst een RoutedEvent met behulp van de methode RegisterRoutedEvent. Volgens de conventie moet de naam van het statische veld RoutedEvent eindigen met het achtervoegsel Gebeurtenis. In dit voorbeeld is de naam van de gebeurtenis Tap
en de routeringsstrategie van de gebeurtenis Bubble. Na de registratieaanroep kunt u CLR-gebeurtenistoegangsors (Common Language Runtime) voor de gebeurtenis opgeven en verwijderen.
Houd er rekening mee dat, hoewel de gebeurtenis in dit specifieke voorbeeld via de OnTap
virtuele methode wordt gegenereerd, hoe u uw gebeurtenis oproept of hoe uw gebeurtenis reageert op wijzigingen, afhankelijk is van uw behoeften.
Houd er ook rekening mee dat in dit voorbeeld in feite een volledige subklasse van Buttonwordt geïmplementeerd; die subklasse is gebouwd als een afzonderlijke assembly en vervolgens wordt geïnstantieerd als een aangepaste klasse op een afzonderlijke XAML-pagina. Dit is om het concept te illustreren dat subgeklasseerde besturingselementen kunnen worden ingevoegd in structuren die bestaan uit andere besturingselementen, en dat aangepaste gebeurtenissen in deze besturingselementen in deze situatie dezelfde mogelijkheden hebben voor het routeren van gebeurtenissen als elk systeemeigen WPF-element.
public class MyButtonSimple: Button
{
// Create a custom routed event by first registering a RoutedEventID
// This event uses the bubbling routing strategy
public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
"Tap", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButtonSimple));
// Provide CLR accessors for the event
public event RoutedEventHandler Tap
{
add { AddHandler(TapEvent, value); }
remove { RemoveHandler(TapEvent, value); }
}
// This method raises the Tap event
void RaiseTapEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(MyButtonSimple.TapEvent);
RaiseEvent(newEventArgs);
}
// For demonstration purposes we raise the event when the MyButtonSimple is clicked
protected override void OnClick()
{
RaiseTapEvent();
}
}
Public Class MyButtonSimple
Inherits Button
' Create a custom routed event by first registering a RoutedEventID
' This event uses the bubbling routing strategy
Public Shared ReadOnly TapEvent As RoutedEvent = EventManager.RegisterRoutedEvent("Tap", RoutingStrategy.Bubble, GetType(RoutedEventHandler), GetType(MyButtonSimple))
' Provide CLR accessors for the event
Public Custom Event Tap As RoutedEventHandler
AddHandler(ByVal value As RoutedEventHandler)
Me.AddHandler(TapEvent, value)
End AddHandler
RemoveHandler(ByVal value As RoutedEventHandler)
Me.RemoveHandler(TapEvent, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As RoutedEventArgs)
Me.RaiseEvent(e)
End RaiseEvent
End Event
' This method raises the Tap event
Private Sub RaiseTapEvent()
Dim newEventArgs As New RoutedEventArgs(MyButtonSimple.TapEvent)
MyBase.RaiseEvent(newEventArgs)
End Sub
' For demonstration purposes we raise the event when the MyButtonSimple is clicked
Protected Overrides Sub OnClick()
Me.RaiseTapEvent()
End Sub
End Class
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
x:Class="SDKSample.RoutedEventCustomApp"
>
<Window.Resources>
<Style TargetType="{x:Type custom:MyButtonSimple}">
<Setter Property="Height" Value="20"/>
<Setter Property="Width" Value="250"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="Background" Value="#808080"/>
</Style>
</Window.Resources>
<StackPanel Background="LightGray">
<custom:MyButtonSimple Name="mybtnsimple" Tap="TapHandler">Click to see Tap custom event work</custom:MyButtonSimple>
</StackPanel>
</Window>
Tunneling-gebeurtenissen worden op dezelfde manier gemaakt, maar met RoutingStrategy ingesteld op Tunnel in de registratieaanroep. Volgens de conventie worden tunnelinggebeurtenissen in WPF voorafgegaan door het woord 'Preview'.
Zie Een gerouteerde gebeurtenis afhandelenvoor een voorbeeld van hoe bubbling-gebeurtenissen functioneren.
Zie ook
.NET Desktop feedback