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