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.

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.



0 comentarios: