no'lu çocuğa ulaşamıyor. Bulama işlemini açıklayan birçok örnek buldum ancak Tünelleştirme ile ilgili hiçbir şey yok. Benim ana sorunum, yöneltilmiş olayı (WindowControl to UserControl) çocukta nasıl kaydedileceğini anlamam. aldım:RoutedEvent Tüneli,
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 kapsüllenmesi gereklidir, hiçbir sorun olmalı? Çocuk addView ile eklenir. Grid_MouseLeftButtonUp çağrıldı.
alıcı (orada pek böylece MVVM olan) aşağıdaki gibidir:
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>
I lütfen bana bildirin şey unuttuysanız. Sorun, yönlendirilen olayın, UserControl_PreviewMouseLeftButtonUp
: Aynı zamanda bu gösteren güzel bir imajı vardır. Neden programa MyParent'in root olduğunu söyleyemiyorum? – Martin
Şimdi anlıyorum. Tünelleme çocuğuma ulaşamaz, bu da benim düşüncemde işe yaramıyor. O rıhtımları okudum ama bir şekilde bu şekilde anlamadım. Arayüzleri kullanarak problemimi çözeceğim ve sadece veriyi geçireceğim (plan B). Mükemmel açıklama için teşekkür ederim. – Martin
Tünel açma işe yaramıyor, sadece denediğinden farklı bir görev için kullanılıyor. Örneğin, TextBox'ta belirli karakterleri tuş basışlarını yakalayarak ve olayları TextBox'a ulaşmadan iptal ederek izin vermemek için kullanılabilir. –