Partager via


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é.

Voir aussi

Concepts

Vue d'ensemble des événements routés

Vue d'ensemble des entrées

Vue d'ensemble de la création de contrôles