wpf - 页面上的某些控件对于 MS UI 自动化不可见

标签 wpf microsoft-ui-automation

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

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

最佳答案

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

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

关于wpf - 页面上的某些控件对于 MS UI 自动化不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16793298/

相关文章:

wpf - 在 XAML 根元素中使用 StaticResource

c# - 如何禁用 ContentControl 中的所有绑定(bind)/触发

wpf - 如果 XAML 中的条件

c# - 是否可以使用 Microsoft Automation UI 在 WPF/WinForm App 上单击标签控件

wpf - 我真的需要 MVVM 吗?

c# - 从命令行运行带有参数的exe

c# - 模态对话框导致 UI 自动化挂起

c# - UI 自动化事件被引发两次

com - Microsoft UIAutomation 中是否有任何内部超时?