Поделиться через


Атрибут x:Name

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

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

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

Значения XAML

Срок Description
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.

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

Обратите внимание, 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.