Wpf 获取页面元素的父元素,子元素。

原创 2013年12月03日 13:46:10
<pre code_snippet_id="94012" snippet_file_name="blog_20131203_1_5449143" name="code" class="csharp">/// <summary>
        /// 获得指定元素的父元素
        /// </summary>
        /// <typeparam name="T">指定页面元素</typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public T GetParentObject<T>(DependencyObject obj) where T : FrameworkElement
        {
            DependencyObject parent = VisualTreeHelper.GetParent(obj);

            while (parent != null)
            {
                if (parent is T)
                {
                    return (T)parent;
                }

                parent = VisualTreeHelper.GetParent(parent);
            }

            return null;
        }

        /// <summary>
        /// 获得指定元素的所有子元素
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public List<T> GetChildObjects<T>(DependencyObject obj) 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)
                {
                    childList.Add((T)child);
                }
                childList.AddRange(GetChildObjects<T>(child));
            }
            return childList;
        }
/// <summary>
        /// 查找子元素
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        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;
        }


                    

【WPF】查找父/子控件(元素、节点)

找父/子控件

WPF获取当前用户控件的父窗体

Window w = ((Grid)this.Parent).Parent as Window;

wpf如何获取control template里的元素

wpf中的控件模板里的元素有自己独立的命名域。 因此不能通过FindName来根据x:Name来查找子节点。 自己写了一个方法, 通过可视树遍历子节点,然后匹配名字。 如下: private s...

WPF 视觉树和逻辑树区别,以及其子节点的遍历过程。

学习,进步

WPF后台给Image添加路径

在项目中增加两张图片Content.jpg和Resource.jpg,分别将其生成操作属性设置为Content和Resource。       在界面中增加两个Image控件ImgContent和I...

css隐藏父元素,不隐藏子元素

您可能不知道的CSS元素隐藏“失效”以其妙用 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu...

高效的获取当前元素是父元素的第几个子元素

例如处理事件的时候,有时候需要知道当前点击的是第几个子节点,而HTML DOM本身并没有直接提供相应的属性,需要自己来计算。 对于表格TD和TR元素优先使用cellIndex和rowIndex属性。对...

Jquery找父元素,祖先,子元素,子孙,兄弟节点

jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父元素 jQuery.childr...

子元素margin-top属性传递给父元素的问题

问题描述: 一个父包含框包含一个子元素。给正常流的子元素一个垂直外边距margin-top就会使得父元素跟着往下走,而子元素和父元素的边距则没有发生变化。 html结构: css样式: .box...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Wpf 获取页面元素的父元素,子元素。
举报原因:
原因补充:

(最多只允许输入30个字)