using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
namespace Demo
{
/// <summary>
/// 与wpf本身相关的工具
/// </summary>
public class WpfTools
{
/// <summary>
/// 获取子元素
/// </summary>
/// <typeparam name="T">子元素的类型</typeparam>
/// <param name="obj">父元素</param>
/// <param name="name">子元素的名字</param>
/// <returns></returns>
public static T GetChildObject<T>(DependencyObject obj, string name) 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 = GetChildObject<T>(child, name);
if (grandChild != null)
return grandChild;
}
}
return null;
}
/// <summary>
/// 查找父元素
/// </summary>
/// <typeparam name="T">父元素的类型</typeparam>
/// <param name="obj">子元素</param>
/// <returns></returns>
public static T GetParentObject<T>(DependencyObject obj) where T : FrameworkElement {
DependencyObject parent = VisualTreeHelper.GetParent(obj);
while (parent != null) {
if (parent is T) {
return (T)parent;
}
parent = VisualTreeHelper.GetParent(parent);
}
return null;
}
/// <summary>
/// 查找所有子元素
/// </summary>
/// <typeparam name="T">子元素的类型</typeparam>
/// <param name="obj">父元素</param>
/// <returns>子元素的列表</returns>
public static List<T> GetChildrenObjects<T>(DependencyObject obj) where T : FrameworkElement {
DependencyObject child = null;
List<T> children = new List<T>();
for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++) {
child = VisualTreeHelper.GetChild(obj, i);
if (child is T)
{
children.Add((T)child);
}
children.AddRange(GetChildrenObjects<T>(child));
}
return children;
}
}
}
wpf-查找指定类型的父元素/子元素
最新推荐文章于 2022-01-19 06:02:24 发布