Gewusst wie: Erstellen eines benutzerdefinierten Routingereignisses

Aktualisiert: November 2007

Damit Ihr benutzerdefiniertes Ereignis das Ereignisrouting unterstützt, müssen Sie mithilfe der RegisterRoutedEvent-Methode ein RoutedEvent registrieren. Dieses Beispiel zeigt die Grundlagen der Erstellung eines benutzerdefinierten Routingereignisses.

Beispiel

Wie im folgenden Beispiel gezeigt, registrieren Sie zuerst ein RoutedEvent, indem Sie die RegisterRoutedEvent-Methode verwenden. Der Konvention nach muss der statische Feldname RoutedEvent auf das Suffix Event enden. In diesem Beispiel hat das Ereignis den Namen Tap, und die Routingstrategie für das Ereignis lautet Bubble. Nach dem Registrierungsaufruf können Sie für das Ereignis common language runtime (CLR)-Ereignisaccessoren zum Hinzufügen und Entfernen angeben.

Beachten Sie, dass, obwohl das Ereignis in diesem Beispiel mithilfe der virtuellen OnTap-Methode ausgelöst wird, es von Ihren jeweiligen Anforderungen abhängt, wie Sie das Ereignis auslösen und wie das Ereignis auf Änderungen reagiert.

Beachten Sie auch, dass in diesem Beispiel praktisch eine gesamte Unterklasse von Button implementiert wird. Diese Unterklasse wird als separate Assembly erstellt und dann auf einer Extensible Application Markup Language (XAML)-Seite als benutzerdefinierte Klasse instanziiert. Auf diese Weise soll veranschaulicht werden, dass als Unterklassen implementierte Steuerelemente in Strukturen eingefügt werden können, die sich aus anderen Steuerelementen zusammensetzen, und dass benutzerdefinierte Ereignisse dieser Steuerelemente in diesem Fall über dieselben Ereignisroutingfunktionen wie systemeigene Windows Presentation Foundation (WPF)-Elemente verfügen.

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>

Tunneling-Ereignisse werden auf dieselbe Weise erstellt, wobei RoutingStrategy im Registrierungsaufruf jedoch auf Tunnel gesetzt ist. Der Konvention nach werden Tunneling-Ereignisse in WPF mit dem Präfix "Preview" versehen.

Das vollständige Beispiel mit der Implementierung des eigentlichen "Tap"-Ereignishandlers finden Sie unter Beispiel für benutzerdefinierte Routingereignisse. Ein Beispiel zur Funktionsweise von Bubbling-Ereignissen finden Sie unter Gewusst wie: Behandeln eines Routingereignisses.

Siehe auch

Konzepte

Übersicht über Routingereignisse

Übersicht über die Eingabe

Übersicht über das Erstellen von Steuerelementen