以上方法不显示当前页面查询不到控件的子控件 ,VisualTreeHelper.GetChildrenCount返回0
时间: 2024-03-26 20:38:23 浏览: 40
如果当前控件没有子控件,那么 `VisualTreeHelper.GetChildrenCount` 方法返回值确实是 0。但是,在 WPF 中,除了控件的直接子控件外,还有一些附加的控件,比如 AdornerLayer 和 Popup 等,它们并不是直接的子控件,但是它们包含在控件的视觉树中。如果想要遍历所有这些控件,可以使用 `LogicalTreeHelper.GetChildren` 方法,如下所示:
```
public static IEnumerable<T> FindLogicalChildren<T>(DependencyObject parent) where T : DependencyObject
{
if (parent != null)
{
if (parent is T)
{
yield return (T)parent;
}
foreach (object child in LogicalTreeHelper.GetChildren(parent))
{
if (child is DependencyObject obj)
{
foreach (T descendant in FindLogicalChildren<T>(obj))
{
yield return descendant;
}
}
}
}
}
```
这里使用了 `LogicalTreeHelper.GetChildren` 方法来获取逻辑子控件,而不是 `VisualTreeHelper.GetChildren` 方法。使用方法与之前的示例类似,只需要将方法名替换为 `FindLogicalChildren` 即可。
阅读全文