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; } }