private T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is T)
{
return (T)child;
}
var childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
{
return childOfChild;
}
}
return null;
}
public static T FindVisualParent<T>(DependencyObject child) where T : DependencyObject
{
DependencyObject dependencyObject = VisualTreeHelper.GetParent(child);
if (dependencyObject != null)
{
T parent = dependencyObject as T;
if (parent != null)
{
return parent;
}
else
{
return FindVisualParent<T>(dependencyObject);
}
}
else
{
return null;
}
}