5

我们有一个带有 StartPage.xaml 的应用程序,其中 TabControl 的控件模板定义了一些网格和堆栈面板。在 xaml 中间的那个模板中有一个 itemPresenter,它下面有一个堆栈面板。虽然它对用户来说工作得很好,但 MS UI 自动化只能看到项目展示器内的选项卡项目,而没有其他在模板中同一级别上定义的项目。我尝试在 MS UIA 看不到的堆栈面板中添加标准按钮,以检查这是否是与我们拥有的自定义用户控件相关的问题,但该标准按钮对于 MS UIA 也是不可见的。如果我使用 Snoop,我可以在模板层次结构的相应级别上的 snoop 树中查看模板中的所有元素。但是 MS UIA 仍然找不到它们。

阻止 MS UIA 在页面上找到它们的控件会出现什么问题?

4

1 回答 1

6

最后我能够检测到问题。TabControl 使用一堆不同的控件进行模板化,而 AutomationPeer 保持不变,仅将 TabItems 视为 TabControl 子项。我将 TabControl 子类化并覆盖 OnCreateAutomation 以创建并返回我的 GenericAutomationPeer,它可以枚举该控件的所有子 UIElement,瞧——UIA 验证现在可以从 TabControl 模板中看到其他控件。

在这里找到了 GenericAutomationPeer 实现:http: //www.colinsalmcorner.com/2011/11/genericautomationpeer-helping-coded-ui.html 非常感谢那篇文章的作者!

于 2013-05-29T12:39:42.060 回答