我正在学习UI自动化,我发现我的“检查对象”克隆显示IsKeyboardFocusable始终为false,即使它为true,其他所有信息也是相同的(从图像中可以看到)。有人知道我检索值时为什么会将此属性视为false吗?

最佳答案

Inspect Object应用程序中,最新版本的Windows Automation COM API(3.0)用于显示所有这些属性。但是默认的.NET UIAutomation实现不是基于Windows Automation API 3.0 COM接口(interface)(它基于此COM API的早期版本)。因此,某些属性无法正常运行。例如,对于Skype的联系人列表,AutomationElement.IsKeyboardFocusableProperty属性表示完全不支持获取该属性的值。您可以使用以下代码段进行检查:

object isKeyboardFocusable = listItem.GetCurrentPropertyValue(AutomationElement.IsKeyboardFocusableProperty, true);
if(isKeyboardFocusable == AutomationElement.NotSupported) {
    // we will always goes here
}

现在,我不知道如何使用当前的.Net UIAutomation实现来避免这种行为。

好消息是,.NET中有替代的UI自动化实现,可以使用新的Windows Automation API 3.0 COM接口(interface),这些接口(interface)提高了可靠性和性能,同时仍使用与之前相同的System.Windows.Automation类。版本的UI自动化。此实现可作为CodePlex上的项目获得:UI Automation COM-to-.NET Adapter

因此,今天尝试使用该替代实现,并使用该替代实现,IsKeyboardFocusable属性返回的结果与Inspect Objects工具相同!此外,现在可以使用Inspect Objects显示的某些扩展属性(例如LegacyIAccessible成员)。

关于c# - IsKeyboardFocusable在Inspect Object中为true,但在我的应用程序中始终为false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15933467/

10-08 21:29