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


Атрибут 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, также имеют свойство с именем 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.) Это обычно для анимации на основе Storyboard. Дополнительные сведения см. в разделе справочников по ресурсам ResourceDictionary и XAML.