Ich fand eine Menge Beispiel zu erklären, sprudelnd aber nichts über Tunneling geht es um Tunneling zB Eltern zu Kind. Ich denke, mein Hauptproblem ist, dass ich nicht verstehe, wie das Routingereignis im Kind (WindowControl zu UserControl) registriert wird. Ich habe:RoutedEvent Tunnel erreicht Kind nicht
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);
}
}
Die Verkapselung von addView notwendig ist, sollte kein Problem sein? Das Kind wird über addView hinzugefügt. Grid_MouseLeftButtonUp wird aufgerufen.
Der Empfänger sieht wie folgt aus (Es ist mvvm so gibt es nicht viel):
public partial class ChildView : UserControl
{
void UserControl_PreviewMouseLeftButtonUp(object sender, RoutedEventArgs args)
{
int i = 0; // The breakpoint is never called
}
}
in der XAML
<Grid>
<Border BorderBrush="black" BorderThickness="1" HorizontalAlignment="Center" VerticalAlignment="Center" PreviewMouseLeftButtonUp="UserControl_PreviewMouseLeftButtonUp">
</Border>
</Grid>
Wenn ich etwas vergessen haben, lassen Sie es mich wissen. Das Problem ist, dass das Routingereignis nicht UserControl_PreviewMouseLeftButtonUp
Ich verstehe nicht. Warum kann ich dem Programm nicht einfach sagen, dass MyParent die Wurzel ist? – Martin
Jetzt verstehe ich. Tunneling kann mein Kind nicht erreichen, was meiner Meinung nach ziemlich nutzlos ist. Ich habe diese Docks gelesen, aber irgendwie habe ich das nicht verstanden. Ich werde mein Problem mit Interfaces lösen und einfach Daten weitergeben (das war Plan B). Danke für die hervorragende Erklärung. – Martin
Tunneling ist nicht nutzlos, es wird einfach für eine andere Aufgabe als die, die Sie versuchen, verwendet. Zum Beispiel könnte es verwendet werden, um das Eingeben bestimmter Zeichen in eine TextBox zu verbieten, indem Tastenbetätigungen erfasst und das Ereignis abgebrochen wird, bevor es die TextBox erreicht. –