إضافة مستمع لجميع أحداث عنصر في WPF
-
10-07-2019 - |
سؤال
وأود أن ربط لجميع أحداث عنصر المتاحة في مكالمة واحدة. بعض الشيء مثل هذا:
elem.AddHandler(AnyRoutedEvent, (RoutedEventHandler)handler)
وكيف يمكنني أن أفعل هذا؟
المحلول
وهذه محاولة للحصول على كل الأحداث على نوع زر ... يمكنك استبدال نوع مختلف.
RoutedEvent[] events = EventManager.GetRoutedEventsForOwner(typeof(Button));
foreach (RoutedEvent e in events)
elem.AddHandler(e, handler);
ويمكنك أيضا استبدال التالية للحصول على الأحداث ALL توجيهها لجميع أنواع، ولكن ذلك سيكون تماما القائمة!
RoutedEvent[] events = EventManager.GetRoutedEvents();
نصائح أخرى
يمكنك استخدام الأسلوب RegisterClassHandler من EventManager إلى staticly الاستماع إلى جميع العناصر دفعة واحدة:)
EventManager.RegisterClassHandler(typeof(your class), Button.ClickEvent, new RoutedEventHandler(OnButtonClick));
static void OnButtonClick(object sender, RoutedEventArgs e)
{
//Do awesome stuff with the button click
}
وأنا خلقت هذا من الإلهام من: <لأ href = "http://geekswithblogs.net/tkokke/archive/2009/07/17/monitoring-routed-events-in-wpf.aspx" يختلط = "نوفولو noreferrer "> http://geekswithblogs.net/tkokke/archive/2009/07/17/monitoring-routed-events-in-wpf.aspx
/// <summary>
/// This is used for debugging, when your looking for a specific event
/// </summary>
public static void RegisterAllEvents(Type type, FrameworkElement target)
{
var events = EventManager.GetRoutedEvents();
foreach (var routedEvent in events)
{
EventManager.RegisterClassHandler(type,
routedEvent, new RoutedEventHandler((sender, args) =>
{
if ( sender != target)
return;
System.Diagnostics.Debug.WriteLine(args.OriginalSource + "=>" + args.RoutedEvent);
}));
}
}
لا تنتمي إلى StackOverflow