我无法找到在WPF面板中添加或删除子项时触发的事件。这样的事件是否存在,我只是错过了它?
答案 0 :(得分:6)
我找不到活动,但您可以尝试Panel.OnVisualChildrenChanged
方法。
答案 1 :(得分:1)
或者,您可以将面板包装在UserControl(可能称为ObservablePanel?)中,该控件具有AddChild方法,该方法在将项目添加到面板后触发事件。
答案 2 :(得分:0)
也可以覆盖Panel.CreateUIElementCollection(...),因此它返回从UIElementCollection派生的自定义类型。在UIElementCollection中,您可以覆盖添加,删除等
public class CustomPanel: Panel
{
protected override UIElementCollection CreateUIElementCollection(FrameworkElement logicalParent)
{
ObservableUIElementCollection uiECollection = new ObservableUIElementCollection(this, logicalParent);
uiECollection.RaiseAddUIElement += OnUIElementAdd;
return uiECollection;
}
}
public class ObservableUIElementCollection : UIElementCollection
{
public ObservableUIElementCollection(UIElement visualParent, FrameworkElement logicalParent)
: base(visualParent, logicalParent)
{
}
public event EventHandler<UIElement> RaiseAddUIElement;
public override int Add(UIElement element)
{
OnRiseAddUIElementEvent(element);
return base.Add(element);
}
protected virtual void OnRiseAddUIElementEvent(UIElement e)
{
// copy to avoid race condition
EventHandler<UIElement> handler = RaiseAddUIElement;
if (handler != null)
handler(this, e);
}
}