差异AutomationProperties.AutomationId AutomationProperties.Name

时间:2014-03-28 11:21:38

标签: wpf xaml properties ui-automation

XAML Propertys之间是否存在真正的差异 AutomationProperties.AutomationId 和 的 AutomationProperties.Name

最重要的是,有没有理由选择其中一个?


虽然msdn对此有所说明,但它们似乎都不是我独有的.AutomationId: "唯一标识指定元素的字符串。"

我测试了一个WPF应用程序,其中有2个按钮,每个按钮在同一个树路径中具有相同的.AutomationId,而.AutomationId根本不是唯一的。

XAML允许我给它们相同的.AutomationId,如果我通过以下代码搜索它们,它将返回两个按钮。

PropertyCondition cond = new PropertyCondition(AutomationElement.AutomationIdProperty, "myButton");
returnedAEs = myMainWindow.FindAll(TreeScope.Children, cond);
foreach (AutomationElement element in returnedAEs)
{
//...enters here 2 times
}

XAML:

<Window ... >
<Grid ...>
<Button ... AutomationProperties.AutomationId="myButton"/>
<Button ... AutomationProperties.AutomationId="myButton"/>
<Window ... >
</Grid>
</Window>

非常感谢您的意见!

2 个答案:

答案 0 :(得分:7)

以下是我发现的一些差异:

  1. 好像Inspect.exe(以前的UISpy.exe)只能读取 .AutomationId,但不是.AutomationName
  2. 关于这两个链接 nameautomationId 可能也有用。与这两个链接最大的区别是:&#34;如果 它没有专门设置AutomationProperties.AutomationId 返回AutomationProperties.Name属性值。&#34;这不是 为name属性指定。
  3. 如果既不是AutomationProperties.AutomationId也不是 设置AutomationProperties.Name,并在xaml中设置名称(不是x:Name, 一个人没有工作!!)设置,然后 AutomationProperties.AutomationId设置为与。相同的值 名称属性是(请注意,我的意思是两个不同的东西 名称(标准XAML属性)和AutomationProperties.Name !!)
  4. 例如,如果使用以下TextBlock:

    <TextBlock x:Name="msgStatus"
        Text="idle"
        ... />
    

    值&#34;空闲&#34;可以访问Text属性 AutomationProperties.Name!这同样适用于阅读标签文本。 AutomationProperties.Name也可以读取标签内容(如果.xaml中未指定AutomationProperties.Name)!

答案 1 :(得分:3)

这可能只是一个背景和维护问题。大多数人都希望在控件上使用类似于Tag属性的ID来传达有关基本对象的信息,这些信息是通过标准属性无法获得的,在这种情况下,也是一种标识形式。名字只是一个名字。您可以在自己的代码中使用这两个问题互换,只要您跟踪它并记住您已经这样做了,但如果此代码必须集成到其他人的代码中,或者你自己必须在几个月/几年后重新访问它,以不同意的方式使用这些属性可能会有问题。请注意,您可以为两个不同的按钮指定相同的ID,但不能为它们指定相同的名称。尽管看起来反直觉,但这实际上为您提供了更多的灵活性,以便如何处理该ID。例如,该ID可用于非常简单地标识该按钮所在的页面。在特定页面上的所有按钮可能具有&#39; 1&#39;的AutomationID。但他们每个人都有自己独特的名字。在这种情况下,你的小方法可以返回Page&#39; 1&#39; 1上的所有按钮。可能非常方便。