【问题标题】:Use reflection to look for controls in side a composite wpf control使用反射在复合 wpf 控件中查找控件
【发布时间】:2011-08-10 14:55:48
【问题描述】:

我试图编写一个方法来查看包含其他 wpf 用户控件元素的 wpf 用户控件。例如,其中一个用户控件包含一个数据网格,其中包含使用 xaml 添加的列。我希望能够操作数据网格中的命名列。我正在尝试使用反射,但找不到获得内部控制的方法。我尝试了不同的获取方法(GetProeprties、GetMembers、GetFields),但找不到内部用户控件的集合。任何想法将不胜感激。

【问题讨论】:

    标签: c# wpf xaml reflection


    【解决方案1】:

    您是否尝试过使用FindName

    var col = uc.FindName("MyColumn") as DataGridColumn;
    

    编辑: 这适用于简单的情况,但对于嵌套的 UserControl 可能不起作用。在这种情况下,您可以递归地使用它,这里有一些粗略的实现:

    public static object FindNamedObject(FrameworkElement container, string name)
    {
        var target = container.FindName(name);
        if (target == null)
        {
            int count = VisualTreeHelper.GetChildrenCount(container);
            for (int i = 0; i < count; i++)
            {
                var child = VisualTreeHelper.GetChild(container, i) as FrameworkElement;
                if (child != null)
                {
                    target = FindNamedObject(child, name);
                    if (target != null)
                    {
                        break;
                    }
                }
            }
        }
        return target;
    }
    

    【讨论】:

    • 完美,忙于使用反射退后一步...谢谢
    • @Chris:很高兴有帮助,我只是添加了一个额外的注释,因为我预计像这样的简单调用在你的情况下会失败,这听起来更复杂。
    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多