WPF Как создать ПОЛЬЗОВАТЕЛЬСКИЙ Tunel RouteDevent?

StackOverflow https://stackoverflow.com/questions/1308000

  •  19-09-2019
  •  | 
  •  

Вопрос

Мне нужен простой пример туннелирования событий туннельной маршрутизации от родительского элемента управления к дочернему элементу управления.

(ЭТО НЕТ НАСТОЯЩИЙ КОД) - на самом деле, чем глубже я копаю, тем больше я думаю, что XAML неправильный - вероятно, НЕ следует подписываться на туннелируемое событие в XAML на дочернем узле (не уверены?)

<PARENT>    
   <MyControl DoSomethingOnUserAction="raiseTunnelEvent"> HELP </MyControl >    
   <CHILD> I SHOULD HANDLE tunnelled event </CHILD> 
</PARENT>

Простой и краткий пример был бы полезен.

Спасибо, Алан

Это было полезно?

Решение

Не уверен, но, возможно, вам хочется, чтобы кошка лаяла.

RoutedEvent ClickEvent кнопки (из PresentationFramework) объявляется как:

public static readonly RoutedEvent ClickEvent = 
    EventManager.RegisterRoutedEvent("Click", 
    RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof
    (ButtonBase));

Обратите внимание readonly RoutingStrategy из Bubble.

Следующие сведения могут помочь в понимании Tunnel, Bubble и Direct:msdn.microsoft.com/en-us/library/system.windows.routingstrategy.aspx

И это должно занять вас до конца пути:msdn.microsoft.com/en-us/magazine/cc785480.aspx

Подсказка:по соглашению события туннелирования в WPF начинаются с «Preview» (например, «PreviewExplode».Если событие не начинается с «Предварительного просмотра», оно, вероятно, не использует туннель RoutingStrategy.Также вы обычно увидите Туннель и Пузырь в паре с Туннелем, который сначала стреляет, затем Пузырь, как в «PreviewExplode», а затем «Взорваться».

Если вам нужен туннель Button's Click, вы можете рассмотреть возможность

  1. использование PreviewMouseDown (конечно, это не то же самое и, вероятно, опасно, поскольку не все нажатия мыши превращаются в щелчки).
  2. Написание TunnelButton, вызывающего PreviewClick, а затем Click.

Другие советы

Оказывается, в книге «У меня есть WPF в действии с Visual Studio 2008» на странице 149 есть очень вводящая в заблуждение диаграмма, которая, похоже, указывает на то, что RoutedEvents может быть вызван в родительском узле и что маршрутизируемое событие туннелируется на дочерние узлы.

Оказывается, это НЕ так...Полдня провалилось из-за плохой диаграммы (в остальном довольно хорошая книга) [ ISBN :1-933988-22-3 ]

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top