Comment : créer un événement routé personnalisé
Mise à jour : novembre 2007
Pour que votre événement personnalisé prenne en charge le routage d'événement, vous devez enregistrer un RoutedEvent à l'aide de la méthode RegisterRoutedEvent. Cet exemple montre les principes de base de la création d'un événement routé personnalisé.
Exemple
Comme illustré dans l'exemple suivant, enregistrez d'abord un RoutedEvent à l'aide de la méthode RegisterRoutedEvent. Par convention, le nom de champ statique RoutedEvent doit se terminer par le suffixe Event. Dans cet exemple, l'événement porte le nom Tap et la stratégie de routage de l'événement est Bubble. Après l'appel d'inscription, vous pouvez fournir des accesseurs d'événement Common Language Runtime (CLR) ajout/suppression pour l'événement.
Notez que même si, dans cet exemple, l'événement est déclenché au moyen de la méthode virtuelle OnTap, la manière dont vous déclenchez votre événement ou dont votre événement répond aux modifications dépend de vos besoins.
Notez également que cet exemple implémente fondamentalement toute une sous-classe de Button ; cette sous-classe est construite comme un assembly distinct, puis est instanciée comme une classe personnalisée d'une page XAML (Extensible Application Markup Language) distincte. Pour illustrer le concept, les contrôles sous-classés peuvent être insérés dans des arborescences composées d'autres contrôles. Dans cette situation, les événements personnalisés de ces contrôles ont exactement les mêmes fonctionnalités de routage d'événements que tout élément Windows Presentation Foundation (WPF) natif.
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="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:SDKSampleLibrary;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>
Les événements de tunneling sont créés de la même manière, mais avec RoutingStrategy ayant la valeur Tunnel dans l'appel d'inscription. Par convention, les événements de tunneling dans WPF sont précédés du préfixe « Preview ».
Pour voir l'exemple complet, y compris l'implémentation du gestionnaire d'événements « Tap » réel, consultez Événements routés personnalisés, exemple. Pour voir un exemple du fonctionnement des événements de propagation, consultez Comment : gérer un événement routé.