MS UI Automation WinForms:无法在 UI 自动化树上找到网格字段选择器 window

MS UI Automation WinForms: Can't find grid field chooser window on UIA automation tree

我们有一个 Infragistics UltraGrid 控件,您可以为该网格显示一个字段选择器 window。

但是,字段选择器不会显示在 UIA 自动化树上。如果我尝试以编程方式搜索它,那么 UIA 找不到它,如果我尝试使用 UIA Verify 手动查找它也是如此。

但是如果我用UIA Verify hover/focus方式找到字段选择器,它就会显示出来,并且和grid控件一样显示出来

如何使用代码找到控件?为什么它没有出现在自动化树上?

这是 Infragistic。某些组件(如 ultratree、ultragrid 等)在对象树上的位置不正确。

可能的解决方案:

  • 尝试从应用程序 window.
  • root 中找到您的控件
  • 模拟鼠标和键盘操作。
  • AutomationElement.FocusedElement获取控制权,然后遍历元素parents

这似乎是 .NET 框架中与从 MDI 子窗体创建的窗体相关的错误。作为解决方法,我已经能够使用 AutomationElement.FromPoint() 函数。

Microsoft forum link

引自 Guy Barker (Microsoft):

“我可以重现您所看到的问题。我将主窗体设置为一个 mdi 容器,并创建了一个子窗体,其 MdiParent 是主窗体。然后我将原始拥有的窗体添加为拥有mdi 子窗体。当我这样做时,我可以在 Inspect 中获取拥有的窗体的详细信息,但该窗体没有出现在 UIA 树视图中。

有趣的是,当我查看所拥有窗体的祖先时,它按预期将 mdi 子窗体列为父窗体。但是由于某种原因,mdi 子窗体不认为拥有的窗体是它的子窗体之一。

我目前没有关于如何解决此问题的任何建议,但如果我确实找到了一些东西,我会 post 在这里发表评论。"