我们有一个使用StartPage.xaml的应用程序,其中TabControl的控件模板定义了一些网格和堆栈面板。在xaml中间的模板中有一个itemPresenter,下面是一个堆栈面板。虽然它适用于用户,但MS UI自动化只能看到项目展示器内的选项卡项,而在模板中的同一级别上没有定义任何其他内容。 我试图在堆栈面板中添加标准按钮,MS UIA无法查看该按钮是否存在与我们自定义用户控件相关的问题,但MS UIA也看不到该标准按钮。 如果我使用Snoop,我可以在模板层次结构的相应级别上的snoop树中看到模板中的所有元素。但MS UIA仍然无法找到它们。
这会阻止MS UIA在页面上找到它们的控件会出现什么问题?
答案 0 :(得分:4)
最后我能够发现问题。 TabControl模板化了许多不同的控件,而AutomationPeer保持不变,只知道TabItems为TabControl子项。 我将TabControl子类化并覆盖OnCreateAutomation以创建并返回我的GenericAutomationPeer,它可以枚举此控件的所有子UIElements,并且瞧 - UIA Verify现在可以看到来自TabControl模板的其他控件。
GenericAutomationPeer实现在此处找到:http://www.colinsalmcorner.com/2011/11/genericautomationpeer-helping-coded-ui.html 非常感谢那篇文章的作者!