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>
非常感谢您的意见!
答案 0 :(得分:7)
以下是我发现的一些差异:
例如,如果使用以下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上的所有按钮。可能非常方便。