Buscar Antecesor en el árbol visual

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.

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.