代码之家  ›  专栏  ›  技术社区  ›  Zeeshan Ali Qureshi

无法在页面加载事件中使用Visualtreehelper。无法获取任何事件

  •  1
  • Zeeshan Ali Qureshi  · 技术社区  · 9 年前

    当我在页面加载事件中使用visualtreehelper时,我没有得到任何元素并得到null异常,但当在ButtonClick上使用它时,得到了正确的结果。

    如何处理?

    这是在ButtonClick上正常工作的函数,但在Page_Loaded_Event上不正常

    public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj)
        where T : DependencyObject
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        yield return (T)child;
                    }
    
                    foreach (T childOfChild in FindVisualChildren<T>(child))
                    {
                        yield return childOfChild;
                    }
                }
            }
        }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   quetzalcoatl    9 年前

    事实上,我不记得了,但让我们看看。也许“页面加载”不能保证 整体 UI是否已构建?也许页面被构造和加载以显示一些初始动画等,并且仅在一段时间后才加载实际内容?

    see this article

    引用:

    而是在 新加载页面的内容 ,并在Loaded事件处理程序中执行任何元素操作、状态更改、事件关联等

    注意他们说的是“页面的内容”,而不是“页面的”。试试看。

    如果没有帮助,您应该能够使用您提到的按钮的Loaded(或任何其他附近的控件)。

    即使这样也无济于事,您也需要检查该页面使用了哪些模板,以及它们何时实际实例化,并仅在该时间点之后才使用ui树扫描程序。