AutomationProperties.Name VS x: Имя

Для «Конструктора тестов CodedUI» нет разницы между AutomationProperties.Name и x:Name. Но первый может перекрыть второй. Также AtomationProperties.Name поддерживает привязку данных, x:Name, конечно, нет.

Как мы знаем, если вы используете шаблон MVVM, лучше всего использовать x:Name только тогда, когда это необходимо.

Так должно ли AutomationProperties.Name быть предпочтительнее x:Name?


person CoffeeCode    schedule 05.01.2011    source источник
comment
Я прочитал и поправлю меня, если ошибаюсь, но в статье нигде не говорится, что вы должны использовать одно вместо другого, это просто статья о том, что я должен дать всему имя?   -  person Silvermind    schedule 17.03.2012
comment
@Silvermind Я обновил текст, чтобы более четко указать содержание статьи.   -  person Trisped    schedule 26.07.2014
comment
@Trisped Это не меняет того факта, о котором я говорю. Ссылка не связана с вопросом, не о предпочтении имени перед x: name или наоборот.   -  person Silvermind    schedule 26.07.2014


Ответы (1)


Резюме

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: Name становится именем поля, которое создается в базовом коде, когда XAML обрабатывается задачей сборки компиляции разметки, и это поле содержит ссылку на объект.

Из вышесказанного мы можем сказать, что x:Name:

  1. используется для доступа к элементу в коде (не XAML), поскольку он контролирует имя поля, содержащего элемент
  2. должен быть уникальным в пределах области имен XAML (поскольку в коде не может быть двух полей с одинаковым именем )

AutomationProperties.Name

В документации по специальным возможностям WPF объясняется, что

Название элемента автоматизации присваивается разработчиком. Свойство Name всегда должно соответствовать тексту метки на экране. Например, имя должно быть «Обзор…» для элемента кнопки с меткой «Обзор…».

person Jon    schedule 08.05.2012
comment
поэтому я предполагаю, что вы также должны локализовать AutomationProperties.Name - person George Birbilis; 16.08.2015