Есть ли способ получить уведомление, когда ребенок добавляется / удаляется из панели WPF? - PullRequest
3 голосов
/ 12 марта 2009

Я не могу найти событие, которое сработало бы при добавлении или удалении дочернего элемента из панели WPF. Такое событие существует, и я просто скучаю по нему?

Ответы [ 3 ]

6 голосов
/ 12 марта 2009

Я не смог найти событие, но вы можете попробовать метод Panel.OnVisualChildrenChanged.

1 голос
/ 31 января 2010

Кроме того, вы можете заключить вашу панель в UserControl (возможно, называемый ObservablePanel?), Который имеет метод AddChild, который генерирует событие после добавления элемента на панель.

0 голосов
/ 25 октября 2016

Также возможно переопределить 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);
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...