很简单,只是楼主你和你楼下的都没想到而已。public void GetGrid(DependencyObject dcy,List<Grid> listgrid = new List<Grid>())
{
    DependencyObject d;
    foreach (var c in LogicalTreeHelper.GetChildren(dcy))
    {
        d = c as DependencyObject;
        if (d != null)
        {
            Grid g = d as Grid;
            if (g != null)
            {
                listgrid.Add(g);
            }
            GetGrid(d,listgrid);
        }
    }
}
private void gird1_MouseDown(object sender, MouseButtonEventArgs e)
{
    var listgrid = GetGrid(this);
    listgrid.ForEach(x =>MessageBox.Show(x.Name));
}

解决方案 »

  1.   

    你的这个问题确实可以按照2楼的这种思路来解决了~不过这个list集合肯定是要创建的,即使是2楼,终究还是创建了一个集合,进行的添加。而且使用的时候外部又创建一个变量,指向结果集合,还不如直接用开始的那个~
      

  2.   


     public List<Grid> GetChildObjects<Grid>(DependencyObject obj)
            {
                DependencyObject child = null;
                List<Grid> childList = new List<Grid>();            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
                {
                    child = VisualTreeHelper.GetChild(obj, i);
                    if (child is Grid)
                    {
                        childList.Add(child);
                    }
                    childList.AddRange(GetChildObjects<Grid>(child));
                }
                return childList;
            }
      

  3.   

    那个报错信息你应该看得懂的吧。public void GetGrid(DependencyObject dcy,List<Grid> listgrid)
    {
        DependencyObject d;
        foreach (var c in LogicalTreeHelper.GetChildren(dcy))
        {
            d = c as DependencyObject;
            if (d != null)
            {
                Grid g = d as Grid;
                if (g != null)
                {
                    listgrid.Add(g);
                }
                GetGrid(d,listgrid);
            }
        }
    }
    private void gird1_MouseDown(object sender, MouseButtonEventArgs e)
    {
        var listgrid = new List<Grid>();
        GetGrid(this,listgrid);
        listgrid.ForEach(x =>MessageBox.Show(x.Name));
    }
      

  4.   

    那个报错信息你应该看得懂的吧。public void GetGrid(DependencyObject dcy,List<Grid> listgrid)
    {
        DependencyObject d;
        foreach (var c in LogicalTreeHelper.GetChildren(dcy))
        {
            d = c as DependencyObject;
            if (d != null)
            {
                Grid g = d as Grid;
                if (g != null)
                {
                    listgrid.Add(g);
                }
                GetGrid(d,listgrid);
            }
        }
    }
    private void gird1_MouseDown(object sender, MouseButtonEventArgs e)
    {
        var listgrid = new List<Grid>();
        GetGrid(this,listgrid);
        listgrid.ForEach(x =>MessageBox.Show(x.Name));
    }谢谢,还是8楼的方法好些