我试图在我的视图中获取所有逻辑子项(用户控件)。我从根元素开始,遍历逻辑树,一切都按预期工作,但是,我的几个子控件是ListBox等项目,它们是数据绑定的,并为子项使用数据模板,这些项目是没有在逻辑树中返回。
以下是我正在使用的代码:
private static void GetLogicalChildren<T>(DependencyObject parent, List<T> logicalCollection) where T : DependencyObject
{
IEnumerable children = LogicalTreeHelper.GetChildren(parent);
foreach (object child in children)
{
if (child is DependencyObject)
{
DependencyObject depChild = child as DependencyObject;
if (child is T)
{
logicalCollection.Add(child as T);
}
GetLogicalChildren(depChild, logicalCollection);
}
}
}
答案 0 :(得分:2)
DataTemplates呈现的控件不在逻辑树中,它们位于可视树中。 DataTemplates绑定到的DataContext对象(可能是Viewmodels)位于Items属性的逻辑树中。
如果要获取子DataTemplates
中包含的可视控件,则需要查看可视树,而不是逻辑树。
VisualTreeHelper
有GetChild
方法和ChildCount
属性,可用于迭代ItemsControls