Ejemplo n.º 1
0
        /// <summary>
        /// 深层递归遍历,查找特定类型的子对象集合
        /// </summary>
        public static List <T> GetChildObjects <T>(DependencyObject objReference) where T : FrameworkElement
        {
            List <T> listChilds = new List <T>();

            do
            {
                if (null == objReference)
                {
                    break;
                }

                int iChildrenCount = VisualTreeHelper.GetChildrenCount(objReference);
                if (0 >= iChildrenCount)
                {
                    break;
                }

                for (int i = 0; i < iChildrenCount; ++i)
                {
                    DependencyObject objChild = VisualTreeHelper.GetChild(objReference, i);
                    if (objChild is T)
                    {
                        listChilds.Add((T)objChild);
                    }

                    List <T> listGrandChilds = VisualTreeHelperEx.GetChildObjects <T>(objChild);
                    if (null != listGrandChilds && listGrandChilds.Count > 0)
                    {
                        listChilds.AddRange(listGrandChilds);
                    }
                }
            }while (false);

            return(listChilds);
        }