Маршрутные события - это события с более «путешествующими способностями», как указано в ответе Гишу .Маршрутизируемые события представлены экземпляром класса RoutedEvent + обычное событие .NET, которое оборачивает его:
public class MyClassWithARoutedEvent : UIElement
{
public static readonly RoutedEvent DoSomethingEvent;
public event RoutedEventHandler DoSomething
{
add { base.AddHandler ( MyClassWithARoutedEvent.DoSomethingEvent, value );
remove { base.AddHandler ( MyClassWithARoutedEvent.DoSomethingEvent, value );
}
}
Обычно вы рекламируете события в таких ситуациях:
- Реализацияваш собственный элемент управления, который легко интегрируется с инфраструктурой WPF
- Обработка событий, инициируемых различными элементами управления в общем корне
- Вид связи между элементами в дереве элементов В большинстве ситуаций вы, вероятно, будете использовать маршрутизируемыеинфраструктура событий, даже не замечая этого.
Кроме того, стоит упомянуть, что вы можете использовать RoutedEvent в вашем элементе управления, даже если он не определяет его или даже наследует от элемента, который это делает.Это потому, что вы действительно можете думать об экземпляре RoutedEvent как строго типизированном имени события.Итак, если у вас есть доступ к этому «имени» (именно поэтому экземпляр перенаправленного события обычно публикуется), вы можете сделать это:
public class MyClassWithARoutedEvent : UIElement
{
public static readonly RoutedEvent ClickEvent;
static MyClassWithARoutedEvent ( )
{
ClickEvent = ButtonBase.ClickEvent.AddOwner( typeof ( MyClassWithARoutedEvent ) );
}
// A wrapper should be placed here as described above
}