WPF – Encontrar Ascendientes y Descendientes en el Arbol visual - Blog de Oskar Alvarez

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

Published 13/8/2009 7:42 por Oskar Alvarez
Archivado en:
Comparte este post:
http://geeks.ms/blogs/oalvarez/archive/2009/08/13/wpf-findancestororself.aspx

Comentarios

# 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

Thursday, August 13, 2009 10:10 AM por .NET con oskar

# re: WPF – Encontrar Ascendientes y Descendientes en el Arbol visual

era mi abuelo natural de arucas canarias

Sunday, October 11, 2009 7:30 PM por *ramon de armas afonso*

# re: WPF – Encontrar Ascendientes y Descendientes en el Arbol visual

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)

Tuesday, March 23, 2010 8:29 PM por MIGUEL DE TELLERIA