SilverLight遍历父子控件的通用方法

public class VTHelper
{
    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;
    }

    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;
    }

    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;
    }
}

posted on 2011-03-29 11:16  elaborateday  阅读(229)  评论(0编辑  收藏  举报