Я нашел много примеров, объясняющих всплытие, но ни один из них не касается туннелирования, это касается туннелирования, например, от родителя к ребенку. Я думаю, что моя главная проблема в том, что я не понимаю, как зарегистрировать маршрутизируемое событие в дочернем элементе (WindowControl в UserControl). Я получил:
public partial class MyParent : UserControl
{
public static readonly RoutedEvent RoutedMouseUpEvent = EventManager.RegisterRoutedEvent(
"PreviewMouseLeftButtonUp", RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(WindowControl));
// Provide CLR accessors for the event
public event RoutedEventHandler MouseUp
{
add { AddHandler(RoutedMouseUpEvent, value); }
remove { RemoveHandler(RoutedMouseUpEvent, value); }
}
public addView(UserControl view)
{
WindowControl win = new WindowControl();
win.Content = view;
}
private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(MyParent.RoutedMouseUpEvent);
RaiseEvent(newEventArgs);
}
}
Необходима инкапсуляция addView, не должно быть проблем? Ребенок добавляется через addView. Вызывается Grid_MouseLeftButtonUp.
Получатель выглядит так (это mvvm, так что не так много):
public partial class ChildView : UserControl
{
void UserControl_PreviewMouseLeftButtonUp(object sender, RoutedEventArgs args)
{
int i = 0; // The breakpoint is never called
}
}
в XAML
<Grid>
<Border BorderBrush="black" BorderThickness="1" HorizontalAlignment="Center" VerticalAlignment="Center" PreviewMouseLeftButtonUp="UserControl_PreviewMouseLeftButtonUp">
</Border>
</Grid>
Если я что-то забыл, пожалуйста, дайте мне знать. Проблема в том, что перенаправленное событие не достигает UserControl_PreviewMouseLeftButtonUp