WPF 获取页面的子级

发布时间 2023-09-08 20:02:56作者: 潇潇烟雨

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;

 

namespace K.Controls.Controls.Helper

{
  public class GetChildHelper
  {
    public static T GetVisualChild<T>(object parent) where T : Visual
    {
      DependencyObject dependencyObject = parent as DependencyObject;
      return InternalGetVisualChild<T>(dependencyObject);
    }

    

    private static T InternalGetVisualChild<T>(DependencyObject parent) where T : Visual
    {
      T child = default(T);

      int numVisuals = VisualTreeHelper.GetChildrenCount(parent);

      for (int i = 0; i < numVisuals; i++)
      {
        Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
        child = v as T;
        if (child == null)
        {
          child = GetVisualChild<T>(v);
        }
        if (child != null)
        {
          break;
        }
      }
     return child;
       }

 

    public static T FindVisualParent<T>(DependencyObject obj) where T : class
    {
      while (obj != null)
    {
      if (obj is T)
        return obj as T;

      obj = VisualTreeHelper.GetParent(obj);
    }
    return null;
  }

  }
}