wpf获取父控件、子控件

it2022-05-09  18

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

相关资源:数据结构—成绩单生成器

最新回复(0)