using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
namespace NeilChen.SilverlightExtensions
{
public static class DomExtensions
{
/// <summary>
/// 查找祖先节点
/// </summary>
/// <typeparam name="T">目标节点的类型</typeparam>
/// <param name="child">起始节点</param>
/// <returns></returns>
public static T FindAncestor<T>(this DependencyObject child) where T : class
{
var d = VisualTreeHelper.GetParent(child);
while (d != null && !(d is T))
{
d = VisualTreeHelper.GetParent(d);
}
return d as T;
}
/// <summary>
/// 查找某种类型的子孙节点
/// </summary>
/// <typeparam name="T">目标节点类型</typeparam>
/// <param name="parent">起始节点</param>
/// <returns>符合条件的节点集合</returns>
public static IEnumerable<T> FindChildren<T>(this DependencyObject parent) where T : class
{
var count = VisualTreeHelper.GetChildrenCount(parent);
if (count > 0)
{
for (var i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
var t = child as T;
if (t != null)
yield return t;
var children = FindChildren<T>(child);
foreach (var item in children)
yield return item;
}
}
}
}
}