AutomationProperties.Name VS x:名称

Cof*_*ode 15 .net silverlight wpf accessibility ui-automation

AutomationProperties.Name和之间的"CodedUI测试构建器"没有区别x:Name.但第一个可以覆盖第二个.此外,AtomationProperties.Name支持数据绑定,x:Name当然不支持.

我们知道如果您使用MVVM模式,最好只x:Name在需要时使用.

所以应该AutomationProperties.Name优先考虑x:Name

Jon*_*Jon 23

摘要

x:NameAutomationProperties.Name是两个完全不同的事情,所以这个问题:"我应该使用一个或另一个"是基于一个错误的前提:在一般情况下,你不能使用一个或另一个.

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

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

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

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

X:名称

MSDN文档页面解释说,

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

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

[...]

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

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

  1. 用于访问代码中的元素(而不是XAML),因为它控制保存元素的字段的名称
  2. XAML名称范围内必须是唯一的(因为代码中不能有两个具有相同名称的字段)

AutomationProperties.Name

WPF辅助功能文档解释

自动化元素的名称由开发人员分配.Name属性应始终与屏幕上的标签文本一致.例如,对于带有"Browse ..."作为标签的按钮元素,Name必须是"Browse ...".

  • 所以我想你也应该本地化 AutomationProperties.Name (3认同)