ibcadmin 发表于 2017-5-10 08:57:52

wpf查找父元素和子元素代码

1.根据类型查找子元素

/// <summary>
      /// 根据类型查找子元素
      /// </summary>
      /// <typeparam name="T"></typeparam>
      /// <param name="obj"></param>
      /// <param name="typename"></param>
      /// <returns></returns>
      public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) 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).GetType() == typename))
                {
                  childList.Add((T)child);
                }
                childList.AddRange(GetChildObjects<T>(child, typename));
            }
            return childList;
      }


1.1 调用方法:

List<StackPanel> initToolBarWeChatUserSp = GetChildObjects<StackPanel>(name, typeof(StackPanel));
2.查找父元素

/// <summary>
      /// 查找父元素
      /// </summary>
      /// <typeparam name="T"></typeparam>
      /// <param name="obj"></param>
      /// <param name="name"></param>
      /// <returns></returns>
      public static T FindParent<T>(DependencyObject i_dp) where T : DependencyObject
      {
            DependencyObject dobj = (DependencyObject)VisualTreeHelper.GetParent(i_dp);
            if (dobj != null)
            {
                if (dobj is T)
                {
                  return (T)dobj;
                }
                else
                {
                  dobj = FindParent<T>(dobj);
                  if (dobj != null && dobj is T)
                  {
                        return (T)dobj;
                  }
                }
            }
            return null;
      }


2.1 调用方法:

Border tbBorder = FindParent<Border>(name);






ibcadmin 发表于 2017-5-10 08:59:08

啊啊啊啊啊啊啊
页: [1]
查看完整版本: wpf查找父元素和子元素代码