Атрибут x:Name
Обновлен: Ноябрь 2007
Однозначно определяет элементы объекта в целях доступа к инициализированному элементу из с выделенным кодом или обычного кода. После применения к вспомогательной модели резервного программирования x:Name может считаться эквивалентным содержащей ссылку на объект переменной, которая возвращается конструктором.
Использование атрибута XAML
<object x:Name="XAMLNameValue".../>
Значения XAML
XAMLNameValue |
Строка, которая соответствует ограничениям Грамматика XamlName. |
Заметки
В стандартной конфигурации построения для проекта приложения WPF, в котором используется XAML, разделяемые классы и выделенный код, указанный атрибут x:Name становится именем поля, которое создается в основном коде при обработке XAML, и в этом поле содержится ссылка на объект.
По умолчанию созданное поле является внутренним. Чтобы изменить уровень доступа к полю, задайте атрибут x:FieldModifier.
Для приложения, в котором используются конечные файлы Microsoft Visual Basic .NET и содержатся файлы XAML, при компиляции создается отдельное свойство ссылки, которое добавляет ключевое слово WithEvents ко всем элементам, имеющим атрибут x:Name, что обеспечивает поддержку синтаксиса Handles для делегатов обработчика событий. Это свойство всегда является открытым. Дополнительные сведения см. в разделе Обработка событий в Visual Basic и WPF.
Атрибут x:Name должен быть уникальным в пределах области видимости имени. В наиболее распространенных случаях XAML первичная область видимости имени определяется элементами, содержащимися на одной странице XAML. Дополнительные дискретные области видимости имени определяются любым шаблоном, также определенным на этой странице. Дополнительные сведения по вопросам области видимости имен см. в разделе Область видимости имен WPF.
Атрибут x:Name используется обработчиком XAML для регистрации имени в области видимости даже в тех случаях, когда страница не скомпилирована (например для свободного XAML). Это связано с тем, что атрибут x:Name может использоваться для привязки свойства ElementName. Дополнительные сведения см. в разделе Общие сведения о связывании данных.
Атрибут x:Name нельзя применять в определенных областях при программировании WPF. Например, элементы в ResourceDictionary не могут иметь имена, поскольку ResourceDictionary обладает особым поведением при определении себя в области видимости имен XAML, однако возвращает значение Not Implemented для ключевых API-интерфейсов INameScope.
Правила разрешения атрибута x:Name, а также однозначность области видимости определяются базовой реализацией среды Windows Presentation Foundation (WPF), в которой различные элементы разметки разбиваются на отдельные диапазоны NameScope, например словари ресурсов, логическое дерево, созданное XAML уровня страниц, шаблоны и т. д.
В некоторых приложениях уровня среды WPF можно не использовать атрибут x:Name, поскольку для аналогичных целей используется свойство зависимостей Name, заданное в пространстве имен WPF для нескольких важных базовых классов (например FrameworkElement или FrameworkContentElement). Однако по-прежнему существуют общие сценарии XAML и среды, в которых необходим доступ кода к элементу без использования свойства Name (наиболее часто такие сценарии встречаются в некоторых классах поддержки анимации и раскадровки). Например, необходимо задать атрибут x:Name для шкал времени и преобразований, созданных в XAML, если планируется ссылка на них из кода.
Если свойство Name доступно как свойство класса, свойство Name и атрибут x:Name можно использовать как взаимозаменяемые атрибуты, однако нельзя одновременно задавать для одного элемента (в этом случае возникает ошибка).
Чтобы установить или изменить свойство пользовательского элемента (может быть свойством CLR или свойством зависимостей), которое соответствует атрибуту x:Name для любого заданного объекта, следует определить его в коде объявления свойства с атрибутом RuntimeNamePropertyAttribute.
Свойство Name можно задать с помощью синтаксиса атрибута XAML, а также в коде с помощью SetValue; однако следует иметь в виду, что в некоторых случаях при задании значения свойства Name в коде не создается действительная ссылка на поле в области видимости имен. Вместо того, чтобы задавать в коде значение свойства Name, вызовите в коде методы NameScope для соответствующей области видимости имен.
Свойство Name также можно задать с помощью синтаксиса элемента свойства XAML с внутренним текстом, однако такой подход используется редко. Атрибут x:Name можно задать в синтаксисе элемента свойства XAML либо в коде с помощью SetValue; его можно задать только с помощью синтаксиса атрибута для элементов.