WPF ContentControl:迭代子控件

时间:2013-09-12 09:44:18

标签: c# wpf dynamic-ui

我有一个WPF窗口,我在其中放置了一个ContentControl,稍后在我的代码中,我使用一个字符串作为Xaml使用XamlReader.Load函数读取并将其放在ContentControl中。这样做是为了制作动态UI。现在一切都已完成,但我想从此控件中捕获Input字段值。点击按钮。

所以,我想做的就是迭代ContentControl的Child Controls。我怎么能这样做,似乎没有办法迭代它的孩子?任何的想法。感谢。

2 个答案:

答案 0 :(得分:4)

逻辑树和可视树之间的区别在于,可视化树列出了用于显示控件的所有元素。例如。按钮的可视树看起来像

按钮 - >边界 - > ContentPresenter - > TextBlock的

逻辑树列表只是控制它自己(正如你在xaml中声明的那样)。 有关详细信息,请访问此站点:http://wpftutorial.net/LogicalAndVisualTree.html

为了得到你想要的孩子,LogicalTreeHelper.GetChildren(contentControl);应该有用。

答案 1 :(得分:3)

在这里,您可以使用VisualTreeHelper:

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(contentControl); i++)
        {
            var child = VisualTreeHelper.GetChild(contentControl, i);
            if(child is ContentPresenter)
            {
                var contentPresenter = child as ContentPresenter;
                for (int j = 0; j < VisualTreeHelper.GetChildrenCount(contentPresenter); j++)
                {
                    var innerChild = VisualTreeHelper.GetChild(contentPresenter, j);
                }

                break;
            }
        }