using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace _29WxOrderWpf.Utils { public class UiCtrlUtils { /// /// 查找模板控件的子控件 /// /// /// /// public static T FindVisualChild(DependencyObject obj) where T : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is T) { return (T)child; } else { T childOfChild = FindVisualChild(child); if (childOfChild != null) { return childOfChild; } } } return null; } /// /// 查找模板控件的子控件 /// /// /// /// /// public static T FindVisualChild(DependencyObject obj, string xName) where T : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); string controlName = child?.GetValue(Control.NameProperty) as string; if (controlName == xName) { return (T)child; } else { T childOfChild = FindVisualChild(child, xName); if (childOfChild != null) { return childOfChild; } } } return null; } public static List FindVisualChildAll(DependencyObject obj, string xName) where T : DependencyObject { List list= new List(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); string controlName = child?.GetValue(Control.NameProperty) as string; if (controlName == xName) { list.Add((T)child); } else { list.AddRange(FindVisualChildAll(child, xName)); } } return list; } } }