WPF silverlight获取子控件(获取DataTemplate里的子控件)
2014-10-16 16:53
651 查看
public static class VisualTreeExtensions { /// <summary> /// 获取父节点控件 /// </summary> /// <typeparam name="T">子控件UI</typeparam> /// <param name="obj">子控件</param> /// <param name="name">父容器名称</param> /// <returns>父容器对象</returns> public static T GetParent<T>(this DependencyObject obj, string name = null) where T : FrameworkElement { DependencyObject parent = VisualTreeHelper.GetParent(obj); while (parent != null) { if (parent is T && (((T)parent).Name == name || string.IsNullOrEmpty(name))) { return (T)parent; } parent = VisualTreeHelper.GetParent(parent); } return null; } /// <summary> /// 获取子控件 /// </summary> /// <typeparam name="T">UI类型</typeparam> /// <param name="obj">父容器对象</param> /// <param name="name">子控件名称</param> /// <returns>子控件</returns> public static T GetChild<T>(this DependencyObject obj, string name = null) where T : FrameworkElement { DependencyObject child = null; T grandChild = null; for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++) { child = VisualTreeHelper.GetChild(obj, i); if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name))) { return (T)child; } else { grandChild = GetChild<T>(child, name); if (grandChild != null) return grandChild; } } return null; } /// <summary> /// 获取子控件集合 /// </summary> /// <typeparam name="T">UI类型</typeparam> /// <param name="obj">父容器对象</param> /// <param name="name">子控件名称</param> /// <returns>子控件集合</returns> public static List<T> GetChildren<T>(this DependencyObject obj, string name = null) 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).Name == name || string.IsNullOrEmpty(name))) { childList.Add((T)child); } childList.AddRange(GetChildren<T>(child, "")); } return childList; } /// <summary> /// 查找某控件下的所有給定類型的子控件集合 /// </summary> /// <typeparam name="T">要查找的子控件類型</typeparam> /// <param name="depObj">父控件</param> /// <returns>子控件集合</returns> public static T FindVisualChild<T>(this DependencyObject depObj, string childName = null) where T : FrameworkElement { if (depObj != null) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) { DependencyObject child = VisualTreeHelper.GetChild(depObj, i); if (child != null && child is T && (((T)child).Name == childName || string.IsNullOrEmpty(childName))) { return (T)child; } else { T childOfChild = FindVisualChild<T>(child, childName); if (childOfChild != null && childOfChild is T) { return childOfChild; } } } return null; } return null; } /// <summary> /// 查找某控件下的所有給定類型的子控件集合 /// </summary> /// <typeparam name="T">要查找的子控件類型</typeparam> /// <param name="depObj">父控件</param> /// <returns>子控件集合</returns> public static List<T> FindVisualChildren<T>(this DependencyObject depObj, string childName = null) where T : FrameworkElement { List<T> list = new List<T>(); if (depObj != null) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) { DependencyObject child = VisualTreeHelper.GetChild(depObj, i); if (child != null && child is T && (((T)child).Name == childName || string.IsNullOrEmpty(childName))) { list.Add((T)child); } List<T> childItems = FindVisualChildren<T>(child, childName); if (childItems != null && childItems.Count > 0) { foreach (var item in childItems) { list.Add(item); } } } } return list; } }
相关文章推荐
- WPF 遍历DataTemplate(获取所有控件)
- Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件
- WPF 遍历DataTemplate(获取所有控件)
- 潜移默化学会WPF(转载篇<一>)--WPF 遍历DataTemplate(获取所有控件)
- WPF 遍历DataTemplate(获取所有控件)
- [Silverlight学习笔记]如何获取ItemsControl的DataTemplate中定义的控件?
- [Silverlight学习笔记]如何获取ItemsControl的DataTemplate中定义的控件?
- WPF 获取 ListView DataTemplate 中控件值
- WPF 点击 datatemplate 里面的控件,获取相应绑定的数据
- Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件
- CYQ.Data 支持WPF相关的数据控件绑定.Net获取iis版本
- 使用VisualTreeHelper获取DataTemplate中的控件
- WPF获取想对于父控件的子控件坐标
- WPF/Silverlight HierarchicalDataTemplate 模版的使用
- WPF-控件-DataTemplate生成的控件
- 菲佣WPF——4(关于DataTemplate(2)动态控件添加神器)
- 获取GridView的EmptyDataTemplate中的控件
- WPF 获得DataTemplate中的控件
- Windows Phone 如何获取ListBox的ItemTemplate/DataTemplate 中指定的控件
- 如何在WPF和Silverlight中取得DataTemplate中的命名元素