I reflector the extension method "ParentOfType<T>"
public static T (System.Windows.UIElement):">ParentOfType<T>(this UIElement element) where T: DependencyObject
{
if (element == null)
{
return default(T);
}
DependencyObject parent = VisualTreeHelper.GetParent(element);
while ((parent != null) && !(parent is T)) //is here need check parent is a UIElement
{
DependencyObject newVisualParent = VisualTreeHelper.GetParent(parent); //if the parent is not UIElement ( like: InlineUIContainer), will occur a InvalidOperationException
if (newVisualParent != null)
{
parent = newVisualParent;
}
else
{
if (!(parent is FrameworkElement))
{
break;
}
parent = (parent as FrameworkElement).Parent;
}
}
return (parent as T);
}
public static T (System.Windows.UIElement):">ParentOfType<T>(this UIElement element) where T: DependencyObject
{
if (element == null)
{
return default(T);
}
DependencyObject parent = VisualTreeHelper.GetParent(element);
while ((parent != null) && !(parent is T)) //is here need check parent is a UIElement
{
DependencyObject newVisualParent = VisualTreeHelper.GetParent(parent); //if the parent is not UIElement ( like: InlineUIContainer), will occur a InvalidOperationException
if (newVisualParent != null)
{
parent = newVisualParent;
}
else
{
if (!(parent is FrameworkElement))
{
break;
}
parent = (parent as FrameworkElement).Parent;
}
}
return (parent as T);
}