页面上的一些控件在MS UI Automation中无法显示

4
我们有一个名为StartPage.xaml的应用程序,其中TabControl的控件模板定义了一些网格和堆栈面板。该模板中间有一个itemPresenter,并且在它下面有一个stack panel。虽然对于用户来说它工作得很好,但是MS UI自动化只能看到item presenter中的选项卡项,而无法看到在同一级别上定义的其他任何内容。
我尝试在无法被MS UIA看到的堆栈面板中添加标准按钮,以检查是否与我们拥有的自定义用户控件有关的问题,但是该标准按钮对于MS UIA也不可见。
如果我使用Snoop,我可以在相应的模板层次结构的snoop树中看到来自模板的所有元素。但是MS UIA仍然找不到它们。
在这里,哪些控件可能出现问题,导致MS UIA无法在页面上找到它们?
1个回答

5
最终我能够发现问题所在。TabControl使用了一堆不同的控件进行模板设计,而AutomationPeer保持不变,只知道TabItems作为TabControl子元素。 我派生了TabControl并重写了OnCreateAutomation,创建并返回了我的GenericAutomationPeer,它可以枚举此控件的所有子UIElements,这样 - UIA Verify就能够看到TabControl模板中的附加控件了。
GenericAutomationPeer实现在此处找到:http://www.colinsalmcorner.com/2011/11/genericautomationpeer-helping-coded-ui.html感谢该文章的作者!

那个链接已经过时了,而且文章似乎没有被WayBackMachine存档。但是该博客的那个月的概述页面(包含该文章)被存档了。 - DevSolar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接