/// <summary> /// 在指定根类型的情况下,从当前层级开始逐层往上查找特定类型的对象 /// </summary> public static T1 GetAncestorOrSelf <T1, T2>(DependencyObject objReference) where T1 : FrameworkElement where T2 : FrameworkElement { T1 objRetval = null; do { if (null == objReference) { break; } if (objReference is T2) { break; } if (objReference is T1) { objRetval = objReference as T1; break; } if (objReference is FrameworkContentElement) { objRetval = VisualTreeHelperEx.GetAncestorOrSelf <T1, T2>((objReference as FrameworkContentElement).Parent); break; } var objParent = VisualTreeHelper.GetParent(objReference); objRetval = VisualTreeHelperEx.GetAncestorOrSelf <T1, T2>(objParent); }while (false); return(objRetval); }