WPF – Encontrar Ascendientes y Descendientes en el Arbol visual

Vaya titulito, y es que no sabia como llamarle así que me he decidido por un titulo largo, al grano este post viene derivado de una pregunta de los foros, la pregunta resumida era como recorrerse el árbol visual de elementos de WPF(algo que ya hemos explicado) para encontrar el padre de un tipo determinado que tiene un objeto.

Por ejemplo coger la instancia de la ventana que ha instanciado mi UserControl, esto seria posible con la siguiente función 

public static T FindAncestorOrSelf<T>(DependencyObject obj) where T : DependencyObject
        {
            while (obj != null)
            {
                T objTest = obj as T;
                if (objTest != null) return objTest;
                obj = VisualTreeHelper.GetParent(obj);
            }
            return null;
        }

y su llamada seria

 

 window = Helper.FindAncestorOrSelf<Window>(this);

 

Como veis me recorro con la función VisualTreeHelper.GetParent el padre del objeto y así voy subiendo sobre el árbol visual hasta encontrar un objeto de tipo Window.

Y para los descendientes sería

 

public Visual GetDescendantByType(Visual element, Type type)
{
if (element == null) return null;
if (element.GetType() == type) return element;
Visual foundElement = null;
if (element is FrameworkElement)
{
(element as FrameworkElement).ApplyTemplate();
}
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
{
Visual visual = VisualTreeHelper.GetChild(element, i) as Visual;
foundElement = GetDescendantByType(visual, type);
if (foundElement != null)
break;
}
return foundElement;
}

En el siguiente post la utilizaremos

3 comentarios sobre “WPF – Encontrar Ascendientes y Descendientes en el Arbol visual”

  1. MI ABUELO ERA MIGUEL DE TELLERIA, NACIDO EL 9.1.1847 HIJO DE JUAN FRANCISCO DE TELLERIA Y MARIA ANTONIA ELOLA, LOS DESCENDIENTES DE ESE MATRIMONIO SON DE LA VILLA DE ASTIGARRETA, HOY PERTENECIENTE A BEASAIN EN GUIPUZCOA, VOY A VIAJAR PROXIMAMENTE Y AGRADECERIA ME INFORMARA SI PUEDO UBICAR ALGUN DESCENDIENTE DE ESTE MATRIMONIO.ATTE
    DANIEL HECTOR TELLERIA LOPEZ (MONTEVIDEO uRUGUAY)

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *