Атрибут x:Name

Служит уникальным идентификатором элементов объекта для доступа к созданному экземпляру объекта из кода программной части или общего кода. После применения к резервной модели программирования x:Name можно рассматривать как аналог переменной, содержащей ссылку на объект, возвращаемую конструктором.

Использование атрибутов XAML

<object x:Name="XAMLNameValue".../>

Значения XAML

Термин Описание
XAMLNameValue Строка, соответствующая ограничениям грамматики XamlName.

Грамматика XamlName

Ниже приведена нормативная грамматика для строки, используемой в качестве раздела реестра в данной реализации XAML:

XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
  • Символы ограничены нижним диапазоном ASCII и, в частности, прописными и строчными буквами римского алфавита, цифрами и символом подчеркивания (_).
  • Диапазон символов Юникод не поддерживается.
  • Имя не может начинаться с цифры. В некоторых реализациях инструментов к строке добавляется символ подчеркивания (_), если пользователь предоставляет цифру в качестве начального символа или средство автоматически создает значения x:Name на основе других значений, содержащих цифры.

Комментарии

Указанное значение x:Name становится именем поля, созданного в базовом коде при обработке XAML; в этом поле содержится ссылка на объект. Это поле создается в соответствии с целевыми шагами MSBuild, которые также отвечают за присоединение разделяемых классов для файла XAML и связанного программного кода. Такое поведение не обязательно определяется языком XAML; это конкретная реализация, которая применяется в программировании на универсальной платформе для Windows (UWP) для XAML в целях использования x:Name в своих моделях программирования и моделях приложений.

Каждый определенный x:Name должен быть уникальным в области имен XAML. Обычно область имен XAML определяется на уровне корневого элемента загруженной страницы и содержит все элементы под этим элементом на одной странице XAML. Дополнительные области имен XAML определяются любым шаблоном элемента управления или шаблоном данных, определенным на этой странице. Во время выполнения создается еще одна область имен XAML для корня дерева объектов, созданного на основе применимого шаблона элемента управления, и по деревьям объектов, созданным в результате вызова XamlReader.Load. Подробнее см. в разделе Области имен XAML.

Средства разработки зачастую автоматически создают значения x:Name для элементов при помещении их в рабочую область конструирования. Схема автоматического создания зависит от используемого конструктора. Обычная схема предусматривает создание строки, начинающейся с имени класса, лежащего в основе элемента, за которой следует увеличивающееся целое число. Например, при вводе в конструктор первого элемента Button можно увидеть, что в XAML этот элемент для атрибута x:Name имеет значение Button1.

x:Name нельзя задать в синтаксисе элементов свойств XAML или в коде с использованием SetValue. x:Name можно задать только с помощью синтаксиса атрибутов XAML в элементах.

Примечание Специально для приложений C++/CX резервное поле для ссылки x:Name не создается для корневого элемента XAML-файла или страницы. Если возникает необходимость создать ссылку на корневой объект в коде программной части C++, используйте другие API или просмотр дерева. Например, можно вызвать FindName для дочернего элемента с известным именем, а затем вызвать Parent.

x:Name и другие свойства Name

Некоторые типы, используемые в XAML UWP, также имеют свойство с именем Name. Например, FrameworkElement.Name и TextElement.Name.

При доступности Name как настраиваемого свойства элемента Name и x:Name можно использовать взаимозаменяемо в XAML, однако если оба атрибута указать для одного элемента, возникнет ошибка. Также в некоторых случаях свойство Name может быть доступно только для чтения (например, VisualState.Name). В этом случае x:Name всегда используется для именования этого элемента в XAML, и доступное только для чтения свойство Name существует для некоторых менее распространенных сценариев кода.

Примечание. Обычно FrameworkElement.Name не следует использовать для изменения значений, изначально заданных с помощью x:Name, хотя существуют сценарии, являющиеся исключениями из этого правила. В обычных сценариях создание и определение областей имен XAML — это операция обработчика XAML. Изменение FrameworkElement.Name во время выполнения может привести к непоследовательному согласованию имен частных полей и областей имен XAML, которое может быть сложно отслеживать в коде программной части.

x:Name и x:Key

x:Name можно применить как атрибут к элементам в ResourceDictionary в качестве замены атрибута x:Key. (По правилу все элементы в ResourceDictionary должны иметь атрибут x:Key или x:Name.) Это обычная ситуация для раскадрованных анимаций. Дополнительные сведения см. в разделе Ссылки на ресурсы ResourceDictionary и XAML.