Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы пользовательское событие поддерживало маршрутизацию событий, необходимо зарегистрировать RoutedEvent с помощью метода RegisterRoutedEvent. В этом примере демонстрируются основы создания пользовательского маршрутизируемого события.
Пример
Как показано в следующем примере, сначала зарегистрируйте RoutedEvent с помощью метода RegisterRoutedEvent. По соглашению имя статического поля RoutedEvent должно заканчиваться суффиксом "Event". В этом примере имя события — Tap
, а стратегия маршрутизации события — Bubble. После вызова регистрации вы можете указать методы доступа к событиям CLR для добавления и удаления.
Обратите внимание, что несмотря на то, что событие возникает через виртуальный метод OnTap
в этом примере, как вы создаете событие или как ваше событие реагирует на изменения, зависит от ваших потребностей.
Обратите внимание, что этот пример в основном реализует целый подкласс Button; этот подкласс создается как отдельная сборка, а затем инстанцируется как настраиваемый класс на отдельной странице XAML. Это иллюстрирует концепцию, что подклассы элементов управления могут быть вставлены в деревья, состоящие из других элементов управления, и что в этой ситуации маршрутизация пользовательских событий этих элементов имеет такие же возможности, как у любого собственного элемента WPF.
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>
События туннелирования создаются так же, но при RoutingStrategy задано значение Tunnel в вызове регистрации. По соглашению события туннелирования в WPF префиксируются словом "Предварительная версия".
Пример работы всплывающих событий, см. в разделе Обработка перенаправленного события.
См. также
- Обзор маршрутизируемых событий
- Обзор данных ввода
- Обзор написания элемента управления
.NET Desktop feedback