个人随笔
技术改变世界

WPF 根据当前控件查找父级控件

在WPF中是以各个元素之间相嵌套,要获取相邻的子元素、父级元素需要使用.NET提供的 VisualTreeHelper 帮助类来进行获取,是比较方便的。

以下是一个在WPF中根据当前元素查询指定的相邻元素的方法。

参数 DependencyObject obj:填写当前控件元素即可。

参数 string name:填写元素的名称,如果没有则填写 string.Empty"" 即可。

 

public static class ControlsSearchHelper
{

    //查找父控件
    public static 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 static 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 static 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;

    }
}

转载请注明出处王旭博客 » WPF 根据当前控件查找父级控件

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址