Nasıl yapılır: Özel Gönderilmiş Olay Oluşturma

Özel olayınızın olay yönlendirmeyi desteklemesi için yöntemini kullanarak RegisterRoutedEvent bir RoutedEvent kaydetmeniz gerekir. Bu örnekte, özel yönlendirilmiş olay oluşturmanın temelleri gösterilmektedir.

Örnek

Aşağıdaki örnekte gösterildiği gibi, önce yöntemini kullanarak RegisterRoutedEvent bir RoutedEvent kaydedersiniz. Kural gereğiRoutedEvent, statik alan adı Event soneki ile bitmelidir. Bu örnekte, olayın adı ve Tap olayın yönlendirme stratejisi şeklindedir Bubble. Kayıt çağrısından sonra olay için ortak dil çalışma zamanı (CLR) ekleme ve kaldırma olay erişimcileri sağlayabilirsiniz.

Bu örnekte olay sanal yöntem aracılığıyla OnTap tetiklenmiş olsa da, olayınızı nasıl yükselttiğinizi veya olayınızın değişikliklere nasıl yanıt verdiği gereksinimlerinize bağlıdır.

Ayrıca, bu örneğin temel olarak alt sınıfının tamamını uyguladığını ve bu alt sınıfın Buttonayrı bir derleme olarak oluşturulduğunu ve ardından ayrı bir XAML sayfasında özel sınıf olarak oluşturulduğunu unutmayın. Bu, alt sınıflanmış denetimlerin diğer denetimlerden oluşan ağaçlara eklenebileceği ve bu durumda, bu denetimlerdeki özel olayların herhangi bir yerel WPF öğesiyle aynı olay yönlendirme özelliklerine sahip olduğu kavramını göstermektir.

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>

Tünel olayları aynı şekilde oluşturulur, ancak RoutingStrategy kayıt çağrısında olarak ayarlanır Tunnel . Kural gereği, WPF'deki tünel olayları "Önizleme" sözcüğüyle öneklenir.

Kabarcık oluşturma olaylarının nasıl çalıştığını gösteren bir örnek görmek için bkz . Yönlendirilmiş Olayı İşleme.

Ayrıca bkz.