我有一个WPF窗口,我在其中放置了一个ContentControl,稍后在我的代码中,我使用XamlReader.Load 函数将字符串读取为Xaml,并将其放入ContentControl中。这样做是为了制作一个 Dyanmic UI。现在一切都完成了,但我想从这个控件中捕获输入字段值。在按钮单击时。
所以,我想做的只是迭代 ContentControl 的子控件。我怎么能做到这一点,似乎没有办法迭代它的孩子?任何想法。谢谢。
在这里,您可以使用 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;
}
}
逻辑树和可视化树之间的区别在于,可视化树列出了用于显示控件的所有元素。 例如,按钮的可视化树看起来像
按钮 ->边框 -> 内容演示者 -> 文本块
逻辑树只列出控件本身(如您在 xaml 中声明的那样)。有关更多详细信息,请访问此网站:http://wpftutorial.net/LogicalAndVisualTree.html
所以为了得到你想要的孩子,LogicalTreeHelper.GetChildren(contentControl);
应该工作。