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.
.NET Desktop feedback