Silverlight獲取子控件和父控件方法

public class VTHelper
    {
         // 在實際項目中,爲滿足實際開發需求,對VisualTreeHelper的方法重新進行封裝是非常必要的。
        ///首先要介紹的Hleper方法是GetParentObject方法,獲取父控件方法。該方法將根據當前控件,遍歷查找其父控件是否存在。參數1是表示當前子控件名,參數2是要查詢父控件名;使用VisualTreeHelper.GetParent方法獲取當前父控件。

        public T GetParentObject<T>(DependencyObject obj, string name) where T : FrameworkElement
        {
            DependencyObject parent = VisualTreeHelper.GetParent(obj);

            while (parent != null)
            {
                if (parent is T && (((T)parent).Name == name | string.IsNullOrEmpty(name)))
                {
                    return (T)parent;
                }

                parent = VisualTreeHelper.GetParent(parent);
            }

            return null;
        }


        //另外一個Helper方法是GetChildObject,獲取子控件方法。該方法將根據當前控件,遍歷查找其子控件是否存在。參數1是表示當前父控件名,參數2是要查詢子控件名;

        public T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
        {
            DependencyObject child = null;
            T grandChild = null;

            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            {
                child = VisualTreeHelper.GetChild(obj, i);

                if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name)))
                {
                    return (T)child;
                }
                else
                {
                    grandChild = GetChildObject<T>(child, name);
                    if (grandChild != null)
                        return grandChild;
                }
            }

            return null;

        }

        /// <summary>
        /// 找出符合條件的一個子對象.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public T GetChildObjectByType<T>(DependencyObject obj) where T : FrameworkElement
        {
            DependencyObject child = null;
            T grandChild = null;

            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            {
                child = VisualTreeHelper.GetChild(obj, i);

                if (child is T )
                {
                    return (T)child;
                }
                else
                {
                    grandChild = GetChildObjectByType<T>(child);
                    if (grandChild != null)
                        return grandChild;
                }
            }

            return null;

        }

        //最後介紹一個Helper方法是GetChildObjects方法,該方法將把所有子控件作爲List集合返回到客戶端。其中第一個參數是父控件參數,而第二個參數是特定子控件名稱,如果需要遍歷全部子控件,第二個參數留空即可。

        public List<T> GetChildObjects<T>(DependencyObject obj, string name) where T : FrameworkElement
        {
            DependencyObject child = null;
            List<T> childList = new List<T>();

            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            {
                child = VisualTreeHelper.GetChild(obj, i);

                if (child is T && (((T)child).Name == name || string.IsNullOrEmpty(name)))
                {
                    childList.Add((T)child);
                }

                childList.AddRange(GetChildObjects<T>(child, ""));
            }

            return childList;

        }

    }

 

轉載自 http://kevinfan.blog.51cto.com/1037293/340244

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章