none
如何获取页面上所有的DataGrid控件? RRS feed

  • 问题

  • 1.如何获取页面上所有的DataGrid控件?
       必须要查找逻辑树方式递归往下找吗?有没有一个方法就像FindName或者FindResource类似的方法去找?

    2.现在有DataGridColumn对象,怎么获取到它父级的DataGrid对象?
       我尝试VisualTreeHelper.Parent不行,因为DataGridColumn不是Visual;用LogicalTreeHelper也不行,因为内部是以FrameworkElement或FrameworkContentElement方式找,而DataGridColumn不是来自于FrameworkElement的,而是直接来自于DependencyObject的。


    Sonny.Lin

    2012年8月10日 7:04

答案

  • 第一个问题:

    没有,你必须自己遍历:

    public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                    yield return (T)child;
                }
    
                foreach (T childOfChild in FindVisualChildren<T>(child))
                {
                    yield return childOfChild;
                }
            }
        }
    }

    然后你可以找到page上所有的DataGrid:

    foreach (DataGrid dg in FindVisualChildren<DataGrid>(Page))
    {
        // do something with tb here
    }

    第二个问题:

    开个新帖子,然后我会在新帖子里面跟你讨论。一个帖子尽量问一个问题。


    Sheldon _Xiao[MSFT]
    MSDN Community Support | Feedback to us
    Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年8月13日 4:39
    版主