WPF Как создать ПОЛЬЗОВАТЕЛЬСКИЙ Tunel RouteDevent?
-
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, вы можете рассмотреть возможность
- использование PreviewMouseDown (конечно, это не то же самое и, вероятно, опасно, поскольку не все нажатия мыши превращаются в щелчки).
- Написание TunnelButton, вызывающего PreviewClick, а затем Click.
Другие советы
Оказывается, в книге «У меня есть WPF в действии с Visual Studio 2008» на странице 149 есть очень вводящая в заблуждение диаграмма, которая, похоже, указывает на то, что RoutedEvents может быть вызван в родительском узле и что маршрутизируемое событие туннелируется на дочерние узлы.
Оказывается, это НЕ так...Полдня провалилось из-за плохой диаграммы (в остальном довольно хорошая книга) [ ISBN :1-933988-22-3 ]