Buscar Antecesor en el árbol visual
Si buscamos algún elemento dentro de un objeto en la interfaz de usuario y necesitamos acceder a sus datos desde el elemento padre, pero no tenemos idea de cuántos niveles de elementos posee éste, la mejor solución es navegar a través del árbol visual hasta encontrar un elemento del tipo de dato que necesitamos.Para eso necesitamos de una extensión de clase que permite navegar a través del árbol visual. He aquí el código:
public static class VisualTreeHelperExtensions { public static T FindAncestor<T>(DependencyObject dependencyObject) where T : class { DependencyObject target = dependencyObject; do { target = VisualTreeHelper.GetParent(target); } while (target != null && !(target is T)); return target as T; } }Cuando necesitamos obtener el elemento en cuestión simplemente utilizamos la siguiente línea:
//StackPanel es el elemento padre donde buscaremos el control y this representa al objeto actual (el hijo). var objeto = VisualTreeHelperExtensions.FindAncestor<StackPanel>(this);Con este sencillo código podemos navegar a través de todos los elementos dentro de un determinado objeto.
0 comentarios: