有没有办法在WPF面板中添加/删除子项时收到通知?

时间:2009-03-12 18:56:54

标签: wpf

我无法找到在WPF面板中添加或删除子项时触发的事件。这样的事件是否存在,我只是错过了它?

3 个答案:

答案 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);
    }


}