Ejemplo n.º 1
0
        /// <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);
        }