Резюме
x:Name
и AutomationProperties.Name
- это две совершенно разные вещи, поэтому вопрос «должен ли я использовать одну или другую» основан на ложной предпосылке: в общем, вы не можете используйте один или другой.
Цель x:Name
состоит в том, чтобы идентифицировать элемент управления WPF в программном коде, чтобы разработчик мог получить к нему доступ.Он не имеет смысла (или уникален) вне области действия класса, который моделирует конкретный элемент WPF.
С другой стороны, цель AutomationProperties.Name
состоит в том, чтобы идентифицировать элемент пользовательского интерфейса в контекстедиалоговое окно или окно другого типа, которое предоставляется пользователю для взаимодействия.В частности, его значение должно соответствовать тому, что пользователь будет воспринимать как «метку» этого элемента пользовательского интерфейса (так что, например, инструмент доступности может информировать пользователя о назначении элемента).
Хотя любой инструмент (например, компилятор XAML) может использовать значение x:Name
для AutomationProperties.Name
, а это не значит, что вам следует это делать;ИМХО, это как раз тот тип «удобства», который приводит к проблемам, потому что различие между ними скрыто от разработчика, поэтому неизменно одно или другое свойство будет иметь семантически неверное значение.
Информация осемантические и технические аспекты каждого свойства следуют в следующих разделах.
x: Имя
На странице MSDN документация объясняется, что
После того как x: Name применено к базовой модели программирования, имя будет эквивалентно переменной, которая содержит ссылку на объект или экземпляр, возвращенный конструктором.
Значение директивы x: Nameиспользование должно быть уникальным в пределах области имен XAML.
[...]
В стандартной конфигурации сборки для приложения WPF, использующего XAML, частичные классы и выделенный код, указанный x: Имя становится именем поля, которое создается в базовом коде, когда XAML обрабатывается компиляцией разметки. Build задача, и это поле содержит ссылку на объект.
Из вышесказанного можно сказать, что x:Name
:
- используется для доступа к элементу в коде(не XAML), поскольку он управляет именем поля, содержащего элемент
- , должно быть уникальным в пределах XAML namescope (поскольку в коде не может быть двух полей с одним и тем же именем)
AutomationProperties.Name
Документация по доступности WPF объясняет, что
Имя для элемента автоматизации назначается разработчиком,Свойство Name всегда должно соответствовать тексту метки на экране.Например, имя должно быть «Обзор…» для элемента кнопки с «Обзор…» в качестве метки.