我有一个基于ContentControl的自定义WPF控件。控件显示电网,并自己绘图。我希望通过自动化框架提供电网元素。 棘手的部分是控制本身有多种方式来绘制电网。它可以使用WPF绘制它,或者它可以使用DirectX绘制它。当它使用DirectX(首选模式)时,控制主机 WindowsFormsHost和其HWND上的randers。
现在我在自定义控件上实现了Automation Peer,并且在Inspect中很好地显示了元素(非常酷)。 但是在尝试通过自动化框架模拟点击时会出现问题。 AutomationElement.FromPoint始终返回windowsformshost自动化元素,而不是我的自定义自动化元素。
当我查看Automation Tree时,它看起来像这样:
Window
pane <- Windows forms host
pane
Titlebar
Custom Control <- My Custom control that displays power grid
Power grid elements
我认为问题是窗格出现在我的自定义控件之前,而自动化框架认为它覆盖了我的元素。 我该如何解决这个问题?我可以告诉Windows Forms Host不要将自己添加到自动化树吗?或者低于我的自定义控件?