Buscar Antecesor en el árbol visual

julio 21, 2017 Christian Amado 0 Comentarios

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: