¿Hay alguna manera de recibir una notificación cuando se agrega / elimina un niño de un Panel de WPF?

votos
3

No puedo encontrar el evento que se activará cuando se agregue o elimine un elemento secundario de un panel de WPF. ¿Existe tal evento y me lo estoy perdiendo?

Publicado el 12/03/2009 a las 19:56
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
6

No pude encontrar un evento, pero puedes probar el Panel.OnVisualChildrenChangedmétodo.

Respondida el 12/03/2009 a las 20:12
fuente por usuario

votos
1

Como alternativa, puede envolver su panel de control de usuario en una (tal vez llamado ObservablePanel?), Que tiene un método AddChild que dispara un evento después de agregar el elemento al panel.

Respondida el 30/01/2010 a las 23:04
fuente por usuario

votos
0

También es posible anular Panel.CreateUIElementCollection (...), por lo que regresa tipo personalizado derivado de UIElementCollection. En UIElementCollection puede anular agregar, quitar, etc.

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


}
Respondida el 25/10/2016 a las 13:01
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more