调用 VisualTreeHelper.GetChild() 时出现 ArgumentOutOfRangeException

ArgumentOutOfRangeException when calling VisualTreeHelper.GetChild()

有时我 运行 在调用 VisualTreeHelper.GetChild().

时陷入 ArgumentOutOfRangeException

异常提到当 VisualChildrenCount 等于 0 时不调用该方法 - 这正是调用之前的 if 应该做的。

我是不是遗漏了什么明显的东西?我还尝试访问 contentPresenter.VisualChildrenCount 但 属性 受到保护。

如果具有给定索引的子项不存在,GetChild 方法将抛出 ArgumentOutOfRangeException。异常消息指的是您传入的 VisualChildrenCount property of the Visual。正如您已经注意到的,此 属性 是 protected

但是,您可以改用 GetChildrenCount on VisualTreeHelper。此方法将在内部访问传入的 Visual 的上述 VisualChildrenCount 属性。

if (VisualTreeHelper.GetChildrenCount(contentPresenter) > 0)
{
   if (VisualTreeHelper.GetChild(contentPresenter, 0) is UIElement contentVisual)
   {
      // ...your code.
   }
}