【转载】wpf 查找指定类型的子控件
http://blog.csdn.net/fallincloud/article/details/6960255#
查找指定类型的子控件
- /// <summary>
- /// Find Child with Visual Tree
- /// </summary>
- /// <typeparam name="T">specail type</typeparam>
- /// <param name="root">the element starts</param>
- /// <returns></returns>
- public static T FindChild<T>(DependencyObject root) where T : DependencyObject
- {
- if (root == null)
- return null;
- T founded = null;
- for (int j = 0; j < VisualTreeHelper.GetChildrenCount(root); j++)
- {
- DependencyObject d = VisualTreeHelper.GetChild(root, j);
- T childType = d as T;
- if (childType == null)
- {
- founded = FindChild<T>(d);
- if (founded != null)
- break;
- }
- else
- {
- founded = childType;
- break;
- }
- }
- return founded;
- }
查找指定类型指定名称的子控件:
- /// <summary>
- /// Find Child with Visual Tree
- /// </summary>
- /// <typeparam name="T">specail type</typeparam>
- /// <param name="root">the element starts</param>
- /// <returns></returns>
- public static T FindChild<T>(DependencyObject root, string name) where T : DependencyObject
- {
- if (root == null)
- return null;
- T founded = null;
- for (int j = 0; j < VisualTreeHelper.GetChildrenCount(root); j++)
- {
- DependencyObject d = VisualTreeHelper.GetChild(root, j);
- T childType = d as T;
- if (childType == null || ((d is FrameworkElement) && (d as FrameworkElement).Name != name))
- {
- founded = FindChild<T>(d, name);
- if (founded != null)
- break;
- }
- else
- {
- founded = childType;
- break;
- }
- }
- return founded;
- }
查找父控件:
- public static T FindParent<T>(DependencyObject d) where T : DependencyObject
- {
- DependencyObject parent = d;
- while (parent != null)
- {
- parent = VisualTreeHelper.GetParent(parent);
- if (parent != null && (parent.GetType() == typeof(T)))
- {
- return parent as T;
- }
- }
- return parent as T;
- }
虽功未成,亦未敢藏私,众侠诸神通尽录于此,竟成一笈,名葵花宝典,以飨后世。
邮箱:steven9801@163.com
QQ: 48039387
邮箱:steven9801@163.com
QQ: 48039387