潜移默化学会WPF(企业经验篇)--全新替代掉VisualHelper功能的类,可视树泛型查找,功能强大
2012-04-19 14:01
537 查看
/// <summary> /// Finds a Child of a given item in the visual tree. /// </summary> /// <param name="parent">A direct parent of the queried item.</param> /// <typeparam name="T">The type of the queried item.</typeparam> /// <param name="childName">x:Name or Name of child. </param> /// <returns>The first parent item that matches the submitted type parameter. /// If not matching item can be found, /// a null parent is being returned.</returns> public static T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject { // Confirm parent and childName are valid. if (parent == null) return null; T foundChild = null; int childrenCount = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < childrenCount; i++) { var child = VisualTreeHelper.GetChild(parent, i); // If the child is not of the request child type child T childType = child as T; if (childType == null) { // recursively drill down the tree foundChild = FindChild<T>(child, childName); // If the child is found, break so we do not overwrite the found child. if (foundChild != null) break; } else if (!string.IsNullOrEmpty(childName)) { var frameworkElement = child as FrameworkElement; // If the child's name is set for search if (frameworkElement != null && frameworkElement.Name == childName) { // if the child's name is of the request name foundChild = (T)child; break; } } else { // child element found. foundChild = (T)child; break; } } return foundChild; } public DependencyObject FindChild(DependencyObject o, Type childType) { DependencyObject foundChild = null; if (o != null) { int childrenCount = VisualTreeHelper.GetChildrenCount(o); for (int i = 0; i < childrenCount; i++) { var child = VisualTreeHelper.GetChild(o, i); if (child.GetType() != childType) { foundChild = FindChild(child, childType); } else { foundChild = child; break; } } } return foundChild; } public static T FindVisualParent<T>(UIElement element) where T : UIElement { UIElement parent = element; while (parent != null) { T correctlyTyped = parent as T; if (correctlyTyped != null) { return correctlyTyped; } parent = VisualTreeHelper.GetParent(parent) as UIElement; } return null; } public static T FindChild<T>(DependencyObject parent) where T : DependencyObject { if (parent == null) return null; T childElement = null; int childrenCount = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < childrenCount; i++) { var child = VisualTreeHelper.GetChild(parent, i); T childType = child as T; if (childType == null) { childElement = FindChild<T>(child); if (childElement != null) break; } else { childElement = (T)child; break; } } return childElement; }
用法,你懂的
相关文章推荐
- 潜移默化学会WPF(企业经验篇)--Log4Net(二)
- 潜移默化学会WPF(样式篇)---改造CheckBox,全新metro风格
- 视树泛型查找,功能强大
- 潜移默化学会WPF(样式篇)---改造ComboBox,全新metro风格
- [导入]从架构设计到系统实施——基于.NET 3.0的全新企业应用系列课程(5):设计基于WPF的客户端.zip(6.98 MB)
- WPF中Visible设为Collapse时,VisualTreeHelper.GetChildrenCount为0
- 用Visual Studio.NET 2008实现功能强大的Ajax+WCF Service交互
- 潜移默化学会WPF(Treeview异步加载节点)
- 潜移默化学会WPF(样式篇)---ListBox的Item样式
- c#创建静态类,在其中定义一个泛型方法,实现查找数组元素的功能
- WPF中让Combobox具有查找功能
- 潜移默化学会WPF(技巧篇)--ComboBox相关(一)
- 使用 Microsoft Office 将 Visual Studio .NET 的强大功能引入业务解决方案的建立[转]
- 用Visual Studio.NET 2008实现功能强大的Ajax+WCF Service交互
- 动态更改按钮的可视状态及VisualTreeHelper的使用
- 潜移默化学会WPF--值转换器
- 功能强大的全新 T-SQL 语法极大地提升了 SQL Server 的可编程性
- 企业微信有什么用,介绍企业微信6个强大的功能
- WPF 3D Hit Test method VisualTreeHelper.HitTest()
- 创建静态类,定义一个泛型方法,实现查找数组元素的功能。