Директива x:Name

Уникально идентифицирует определяемые XAML элементы в имени XAML область. Имя XAML область и их модели уникальности могут применяться к экземплярам объектов, когда платформы предоставляют API или реализуют поведение, которое обращается к графу объектов XAML во время выполнения.

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

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

Значения XAML

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

Замечания

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

Значение x:Name использования директивы должно быть уникальным в имени XAML область. По умолчанию при использовании API служб XAML .NET основное имя XAML область определяется в корневом элементе XAML одной рабочей среды XAML и включает элементы, содержащиеся в этой рабочей среде XAML. Дополнительные дискретные имена XAML область, которые могут возникнуть в одной рабочей среде XAML, можно определить платформами для решения конкретных сценариев. Например, в WPF новое имя XAML область определяется и создается любым шаблоном, который также определен в рабочей среде XAML. Дополнительные сведения о имени XAML область (написанном для WPF, но актуальном для многих понятий XAML область), см. в статье WPF XAML Name область s.

Как правило, x:Name не следует применять в ситуациях, которые также используют x:Key. Реализации XAML в конкретных существующих платформах ввели концепции подстановки между x:Key и x:Name, но это не рекомендуется. Службы XAML .NET не поддерживают такие понятия подстановки при обработке сведений об имени или ключе, таких как INameScope или DictionaryKeyPropertyAttribute.

Правила разрешения x:Name , а также принудительное применение уникальности имен потенциально определяются определенными платформами реализации. Тем не менее, чтобы использовать службы XAML .NET, определения платформы имени XAML область уникальность должна соответствовать определению INameScope информации в этой документации и использовать те же правила, касающиеся того, где применяется информация. Например, реализация Windows Presentation Foundation (WPF) разделяет различные элементы разметки на отдельные NameScope диапазоны, такие как словари ресурсов, логическое дерево, созданное XAML на уровне страницы, шаблоны и другое отложенное содержимое, а затем применяет уникальность имен XAML в каждом из этих имен XAML область.

Для пользовательских типов, использующих записи объектов XAML служб .NET XAML, можно установить или изменить свойство, которое сопоставляется с x:Name типом. Это поведение определяется путем ссылки на имя свойства для сопоставления с RuntimeNamePropertyAttribute кодом определения типа. RuntimeNamePropertyAttribute — это атрибут уровня типа.

Using.NET службах XAML логика резервного копирования для имени XAML область поддержка может быть определена в нейтральном режиме, реализуя INameScope интерфейс.

Заметки об использовании WPF

В стандартной конфигурации сборки для приложения WPF, использующего XAML, частичные классы и закодированные элементы, указанное x:Name становится именем поля, созданного в базовом коде при обработке XAML задачей сборки компиляции разметки, и это поле содержит ссылку на объект. По умолчанию созданное поле является внутренним. Вы можете изменить доступ к полю, указав атрибут x:FieldModifier. В WPF и Silverlight последовательность заключается в том, что компиляция разметки определяет и именует поле в частичном классе, но значение изначально пусто. Затем созданный метод InitializeComponent вызывается из конструктора классов. InitializeComponent состоит из FindName вызовов, использующих каждое из x:Name значений, которые существуют в определенной XAML части частичного класса в качестве входных строк. Затем возвращаемые значения назначаются ссылке на подобное поле для заполнения значений полей объектами, созданными из синтаксического анализа XAML. Выполнение InitializeComponent позволяет ссылаться на граф объектов времени выполнения напрямую с помощью x:Name имени поля /, а не FindName вызывать явно в любой момент, когда требуется ссылка на определенный XAML-объект.

Для приложения WPF, использующего целевые объекты Microsoft Visual Basic и содержащий XAML-файлы с Page действием сборки, во время компиляции создается отдельное эталонное свойство, которое добавляет WithEvents ключевое слово ко всем элементам с x:NameHandles поддержкой синтаксиса делегатов обработчика событий. Это свойство всегда является общедоступным. Дополнительные сведения см. в разделе Обработка событий в Visual Basic и WPF.

x:Nameиспользуется обработчиком XAML WPF для регистрации имени XAML область во время загрузки, даже в случаях, когда страница не компилируется действиями сборки (например, свободное XAML словаря ресурсов). Одна из причин этого поведения заключается в том, что x:Name потенциально требуется для ElementName привязки. Дополнительные сведения см. в разделе "Обзор привязки данных".

Как упоминание ранее, (илиName) не следует применять в ситуациях, x:Name которые также используютx:Key. WPF ResourceDictionary имеет специальное поведение, определяющее себя как имя XAML область но возврат не реализованных или null значений для INameScope API в качестве способа применения этого поведения. Если средство синтаксического анализа XAML WPF или Namex:Name в коде XAML не добавляется в любое имя XAML ResourceDictionaryобласть. Попытка найти это имя из любого имени XAML область и методы не возвращают допустимые FindName результаты.

x:Name и Name

Многие сценарии приложений WPF могут избежать использования атрибута x:Name , так как Name свойство зависимостей, указанное в пространстве имен XAML по умолчанию для нескольких важных базовых классов, таких как FrameworkElement и FrameworkContentElement удовлетворяет этой же цели. Существуют некоторые распространенные сценарии XAML и WPF, где доступ кода к элементу без Name свойства на уровне платформы важен. Например, некоторые классы поддержки анимации и раскадровки не поддерживают Name свойство, но они часто должны ссылаться в коде для управления анимацией. Вы должны указать x:Name в качестве атрибута в временная шкала и преобразованиях, созданных в XAML, если вы планируете ссылаться на них из кода позже.

Если Name свойство доступно в классе и Namex:Name может использоваться взаимозаменяемо в качестве атрибутов, но исключение синтаксического анализа приведет к тому, что оба элемента указаны в одном элементе. Если разметка XAML компилируется, исключение будет происходить в компиляции разметки, в противном случае она возникает при загрузке.

Nameможно задать с помощью синтаксиса атрибута XAML и в коде; SetValueобратите внимание, что установка Name свойства в коде не создает ссылку на поле представителя в имени XAML область в большинстве случаев, когда XAML уже загружен. Вместо попытки задать Name код используйте NameScope методы из кода в соответствии с соответствующим именем область.

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

Примечания об использовании Silverlight

Директива x:Name для Silverlight документирована отдельно. Дополнительную информацию см. в статье Возможности пространства имен языка XAML (x:).

См. также