AutomationProperties.Name
和x:Name
之间的“CodedUI测试版”没有区别。但第一个可以覆盖第二个。
此外,AtomationProperties.Name支持数据绑定,x:Name
当然不支持。
As we know如果您使用的是MVVM模式,最好只在需要时使用x:Name
。
那么AutomationProperties.Name
应该优先选择x:Name
吗?
答案 0 :(得分:22)
x:Name
和AutomationProperties.Name
是两个完全不同的东西,所以“我应该使用其中一个”的问题是基于一个错误的前提:一般来说,你不能使用其中一种。
x:Name
的目的是在代码隐藏中识别WPF控件,以便开发人员可以访问它。在模拟特定WPF元素的类范围之外,它没有意义(或唯一)。
另一方面,AutomationProperties.Name
的目的是在对话框或其他类型的窗口的上下文中标识用户界面元素,该窗口被呈现给用户以进行交互。具体而言,其值应与用户将其视为该用户界面元素的“标签”的内容相匹配(以便例如可访问性工具可以通知用户该元素的用途)。
虽然任何工具(例如XAML编译器)都可以选择将x:Name
的值用于AutomationProperties.Name
,但这并不意味着你应该做的事情;恕我直言,这正是导致问题的“便利”类型,因为两者之间的差异对开发人员是隐藏的,因此总是一个或另一个属性最终会出现语义错误的值。
有关每个属性的语义和技术方面的信息将在下一节中介绍。
MSDN documentation页面解释了
在x:Name应用于框架的支持编程模型之后, 该名称等同于包含对象引用的变量 或构造函数返回的实例。
x:Name指令用法的值在XAML中必须是唯一的 名称范围。
[...]
在使用的WPF应用程序的标准构建配置下 XAML,部分类和代码隐藏,指定的x:Name变为 XAML时在底层代码中创建的字段的名称 由标记编译构建任务处理,该字段成立 对象的引用。
从上面我们可以看出x:Name
:
WPF accessibility documentation解释了
自动化元素的名称由开发人员分配。该 Name属性应始终与标签文本一致 屏幕。例如,名称必须是按钮元素的“浏览...” 以“浏览...”作为标签。