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
Vaya titulito, y es que no sabia como llamarle así que me he decidido por un titulo largo, al
era mi abuelo natural de arucas canarias
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)