Aquí podría ser tu PUBLICIDAD


¿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 AlfredBr
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 08:12
fuente por usuario Robert Macnee


Aquí podría ser tu PUBLICIDAD


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 11:04
fuente por usuario Mike Pateras

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 01:01
fuente por usuario Marcin Machowski