2012-07-12 29 views
3

我想对所有加载注册事件处理工作:路由事件提供类处理程序不会对大多数类

EventManager.RegisterClassHandler(typeof(UIElement), FrameworkElement.LoadedEvent, new RoutedEventHandler(OnRoutedEvent), true); 
EventManager.RegisterClassHandler(typeof(ContentElement), FrameworkContentElement.LoadedEvent, new RoutedEventHandler(OnRoutedEvent), true); 
EventManager.RegisterClassHandler(typeof(UIElement), FrameworkElement.UnloadedEvent, new RoutedEventHandler(OnRoutedEvent), true); 
EventManager.RegisterClassHandler(typeof(ContentElement), FrameworkContentElement.UnloadedEvent, new RoutedEventHandler(OnRoutedEvent), true); 

不幸的是我的处理程序只要求窗口和DatePicker的后裔。它不适用于任何其他类型。

任何人都可以解释这种行为吗? 这是一个bug,很遗憾他们选择忽略它。

是否有一些其他方式可以通知应用程序/窗口中的任何新元素?

+0

下落你把RegisterClassHandlers加载/卸载事件?在App.cs中? – 2012-07-12 20:02:04

+0

是的,在静态构造函数中,但它并不重要,因为类处理程序无论如何都被破坏(请参见上面的错误);( – 2012-07-13 08:57:30

+0

这是一个长镜头,有点不好意思,但是您可以替换FrameworkElement.Initialized事件的RegisterClassHandler即创建但尚未呈现)...然后在该回调调用UIElement实例上的AddHandler来连接Loaded和Unloaded事件 – 2012-07-13 10:27:27

回答

4

也许你可以定义一个AttachedProperty /行为使用FrameworkPropertyMetadataOptions.Inherits,然后指定其根元素,并且在行为挂钩上的每个实例

+0

除了挂钩新窗口之外,还可以滥用SizeChangedEvent来调用自定义初始化程序。我的代码在这里:https://gist.github.com/3104963 – 2012-07-13 13:47:23