Delen via


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