2

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

所以,我要做的就是迭代 ContentControl 的子控件。我该怎么做,似乎没有办法迭代它的孩子?任何的想法。谢谢。

4

2 回答 2

4

在这里,您可以使用 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;
            }
        }
于 2013-09-12T09:53:01.003 回答
4

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

按钮 -> 边框 -> ContentPresenter -> TextBlock

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

所以要得到你想要的孩子,LogicalTreeHelper.GetChildren(contentControl);应该工作。

于 2013-09-12T10:21:11.787 回答