AutomationProperties.Name VS x:名称

时间:2011-01-05 15:25:34

标签: .net wpf silverlight accessibility ui-automation

AutomationProperties.Namex:Name之间的“CodedUI测试版”没有区别。但第一个可以覆盖第二个。 此外,AtomationProperties.Name支持数据绑定,x:Name当然不支持。

As we know如果您使用的是MVVM模式,最好只在需要时使用x:Name

那么AutomationProperties.Name应该优先选择x:Name吗?

1 个答案:

答案 0 :(得分:22)

摘要

x:NameAutomationProperties.Name是两个完全不同的东西,所以“我应该使用其中一个”的问题是基于一个错误的前提:一般来说,你不能使用其中一种。

x:Name的目的是在代码隐藏中识别WPF控件,以便开发人员可以访问它。在模拟特定WPF元素的类范围之外,它没有意义(或唯一)。

另一方面,AutomationProperties.Name的目的是在对话框或其他类型的窗口的上下文中标识用户界面元素,该窗口被呈现给用户以进行交互。具体而言,其值应与用户将其视为该用户界面元素的“标签”的内容相匹配(以便例如可访问性工具可以通知用户该元素的用途)。

虽然任何工具(例如XAML编译器)都可以选择将x:Name的值用于AutomationProperties.Name,但这并不意味着你应该做的事情;恕我直言,这正是导致问题的“便利”类型,因为两者之间的差异对开发人员是隐藏的,因此总是一个或另一个属性最终会出现语义错误的值。

有关每个属性的语义和技术方面的信息将在下一节中介绍。

X:名称

MSDN documentation页面解释了

  

在x:Name应用于框架的支持编程模型之后,   该名称等同于包含对象引用的变量   或构造函数返回的实例。

     

x:Name指令用法的值在XAML中必须是唯一的   名称范围。

     

[...]

     

在使用的WPF应用程序的标准构建配置下   XAML,部分类和代码隐藏,指定的x:Name变为   XAML时在底层代码中创建的字段的名称   由标记编译构建任务处理,该字段成立   对象的引用。

从上面我们可以看出x:Name

  1. 用于访问代码中的元素(不是XAML),因为它控制包含元素的字段的名称
  2. XAML namescope内必须是唯一的(因为代码中不能有两个名称相同的字段)
  3. AutomationProperties.Name

    WPF accessibility documentation解释了

      

    自动化元素的名称由开发人员分配。该   Name属性应始终与标签文本一致   屏幕。例如,名称必须是按钮元素的“浏览...”   以“浏览...”作为标签。