我想創建一個觸發時Panel.OnVisualChildrenChanged
被稱爲附着面板事件:我該如何提出一個附加的事件處理程序?
public class PanelObserver {
public static readonly RoutedEvent VisualChildrenChangedEvent;
static PanelObserver() {
VisualChildrenChangedEvent = EventManager.RegisterRoutedEvent(
"VisualChildrenChanged",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(Panel));
}
public static void AddVisualChildrenChangedHandler(
DependencyObject d, RoutedEventHandler handler) {
//Something needs to be done to d so that when OnVisualChildrenChanged is called,
//it will fire handler.
(d as Panel)?.AddHandler(VisualChildrenChangedEvent, handler);
}
public static void RemoveVisualChildrenChangedHandler(
DependencyObject d, RoutedEventHandler handler) {
//Something will likely need to be done to d here as well...
(d as Panel)?.RemoveHandler(VisualChildrenChangedEvent, handler);
}
}
使用情況是相當直截了當
<Grid myns:PanelObserver.VisualChildrenChanged = "SomeEventHandler" />
理想情況下,事件將每次Panel.OnVisualChildrenChanged
是提高調用。如果可能的話,我需要添加到AddVisualChildrenChanged
方法(以及它的對映)以實現此目的嗎?如果這不是如何實現這一點,那麼完成這個的適當方法是什麼?
謝謝。這太愚蠢了。似乎是一個非常重要的疏忽,不要讓某些方法檢測.Net團隊對面板內容的更改。 – Will