C# 托管Windows窗体主机的自定义WPF控件的自动化

C# 托管Windows窗体主机的自定义WPF控件的自动化,c#,wpf,winforms-interop,microsoft-ui-automation,C#,Wpf,Winforms Interop,Microsoft Ui Automation,我有一个基于ContentControl的自定义WPF控件。该控件显示电网,并绘制自己的图形。我希望通过自动化框架提供电网元素。 棘手的部分是控件本身有多种方式来绘制电网。它可以使用WPF绘制,也可以使用DirectX绘制。当它使用DirectX(首选模式)时,控制主机 WindowsFormsHost和randers在其HWND上 现在我已经在我的自定义控件上实现了自动化对等,所有元素都在Inspect中显示得很好(非常酷)。 但当试图模拟点击式自动化框架时,问题就出现了。Automation

我有一个基于ContentControl的自定义WPF控件。该控件显示电网,并绘制自己的图形。我希望通过自动化框架提供电网元素。 棘手的部分是控件本身有多种方式来绘制电网。它可以使用WPF绘制,也可以使用DirectX绘制。当它使用DirectX(首选模式)时,控制主机 WindowsFormsHost和randers在其HWND上

现在我已经在我的自定义控件上实现了自动化对等,所有元素都在Inspect中显示得很好(非常酷)。 但当试图模拟点击式自动化框架时,问题就出现了。AutomationElement.FromPoint始终返回windowsformshost自动化元素,而不是我的自定义自动化元素

当我查看自动化树时,它看起来像这样:

Window
   pane   <- Windows forms host
      pane
   Titlebar
   Custom Control <- My Custom control that displays power grid
       Power grid elements
窗口

窗格该窗格位于自定义控件之前,因为它包含该控件,并且树公开了此逻辑结构。FromPoint方法文档声明它总是返回最接近根元素的元素,在本例中,根元素是包含窗格。我不知道您可以将其隐藏在树中,但是您可能可以自己实现自定义控件的调用模式。请看这里: