XAML属性之间是否存在真正的差异
AutomationProperties.AutomationId
AutomationProperties.Name 吗?

最重要的是,是否有任何理由选择一个?

尽管msdn对.AutomationId这么说,但它们对我来说似乎都不是唯一的:
“唯一标识指定元素的字符串。”

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

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

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>

您的输入将不胜感激!

最佳答案

这是我发现的一些差异:

  • 似乎Inspect.exe(以前的UISpy.exe)只能读取
    .AutomationId,但不是.AutomationName
  • 这两个链接有关
    name

    automationId
    可能也很有用。这两个链接的最大区别是:“如果
    没有专门设置AutomationProperties.AutomationId,它
    返回AutomationProperties.Name属性值。”
    为name属性指定。
  • 如果既不是AutomationProperties.AutomationId也不是
    设置了AutomationProperties.Name,并在xaml中设置了Name(不是x:Name,
    设置为不起作用!),然后
    AutomationProperties.AutomationId设置为与
    名称属性是(请注意,我的意思是与
    名称(标准XAML属性)和AutomationProperties.Name !!)
  • 例如,如果使用以下TextBlock:
    <TextBlock x:Name="msgStatus"
        Text="idle"
        ... />
    

    可以通过以下方式访问文本属性的值“idle”
    AutomationProperties.Name!阅读标签文本也是如此。标签内容也可以由AutomationProperties.Name读取(如果未在.xaml中指定AutomationProperties.Name)!
  • 关于wpf - 差异AutomationProperties.AutomationId AutomationProperties.Name,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22711461/

    10-10 10:16