wpf获取父控件、子控件

1、获取父控件

调用方法:Grid layoutGrid = VTHelper.GetParentObject<Grid>(this.spDemoPanel, "LayoutRoot");

 1 public T GetParentObject<T>(DependencyObject obj, string name) where T : FrameworkElement
 2 {
 3     DependencyObject parent = VisualTreeHelper.GetParent(obj);
 4     while (parent != null)
 5     {
 6         if (parent is T && (((T)parent).Name == name || string.IsNullOrEmpty(name)))
 7         {
 8            return (T)parent;
 9         }
10         parent = VisualTreeHelper.GetParent(parent);
11     }
12     return null;
13}

2、获取子控件

调用方法:StackPanel sp = VTHelper.GetChildObject<StackPanel>(this.LayoutRoot, "spDemoPanel");

 1 public T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
 2           {
 3               DependencyObject child = null;
 4               T grandChild = null;
 5               for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
 6               {
 7                  child = VisualTreeHelper.GetChild(obj, i);
 8                  if (child is T && (((T)child).Name == name || string.IsNullOrEmpty(name)))
 9                  {
10                      return (T)child;
11                  }
12                  else
13                  {
14                      grandChild = GetChildObject<T>(child, name);
15                      if (grandChild != null)
16                      return grandChild;
17                  }
18              }
19              return null;
20          }

3、获取所有子控件

调用方法:List<TextBlock> textblock = VTHelper.GetChildObjects<TextBlock>(this.LayoutRoot, "");

在表格中的控件:List<TextBox> listTextBox = GetChildObjects<TextBox>(radGridView_File.ItemContainerGenerator.ContainerFromItem(radGridView_File.SelectedItems[0]), "");

 1 public List<T> GetChildObjects<T>(DependencyObject obj, string name) where T : FrameworkElement
 2           {
 3               DependencyObject child = null;
 4               List<T> childList = new List<T>();
 5               for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
 6               {
 7                  child = VisualTreeHelper.GetChild(obj, i);
 8                  if (child is T && (((T)child).Name == name || string.IsNullOrEmpty(name)))
 9                  {
10                      childList.Add((T)child);
11                  }
12                 childList.AddRange(GetChildObjects<T>(child,""));
13               }
14              return childList;
15          }
原文地址:https://www.cnblogs.com/Seek-logic/p/3234008.html