FrameworkElement.FindName(String) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Извлекает объект с указанным именем идентификатора.
public:
virtual Platform::Object ^ FindName(Platform::String ^ name) = FindName;
IInspectable FindName(winrt::hstring const& name);
public object FindName(string name);
function findName(name)
Public Function FindName (name As String) As Object
Параметры
- name
-
String
Platform::String
winrt::hstring
Имя запрошенного объекта.
Возвращаемое значение
Запрошенный объект. Это может быть null, если в текущей области имен XAML не найден соответствующий объект.
Комментарии
Important
Чтобы эффективно использовать FindName метод, следует понять концепцию области имен XAML и как создается область имен XAML во время загрузки XAML, а затем ссылаться на нее и, возможно, изменяться во время выполнения. Дополнительные сведения см. в области имен XAML.
Наиболее распространенное использование FindName в коде среда выполнения Windows будет происходить в созданном InitializeComponent вызове страницы XAML. В этой ситуации FindName вызывается только после загрузки страницы XAML.
InitializeComponent предоставляет инфраструктуру, так что любой объект, созданный загрузкой XAML, можно удобно получить доступ к коду программной части. Затем можно ссылаться на объекты как переменную, которая использует то же имя, что и атрибут x:Name, объявленный разметкой.
API времени выполнения, FindName например работает с деревом объектов во время выполнения приложения, так как он существует в памяти. При создании части дерева объектов из шаблонов или загрузки XAML область имен XAML обычно не связана в этом дереве объектов. Результатом является то, что в дереве объектов может быть именованный объект, который не удается найти в заданной FindName области. Разрывы между областями имен XAML, которые могут возникнуть в типичных сценариях приложения, относятся к созданию объектов путем применения шаблона или при создании объектов с помощью вызова XamlReader.Load и последующего добавления в дерево объектов.
Если вы возвращаете неожиданный результат null для FindName, попробуйте выполнить следующие методы:
- Для именованных объектов, поступающих из шаблона, при определении или производных от элемента управления можно вызвать GetTemplateChild из области объекта, в котором применяется шаблон. Для использования GetTemplateChild необходимо находиться в области определения производного класса, так как это защищенный метод Control.
- Если вы не находитесь в области определения производного класса, вы можете ввести визуальное дерево шаблона с помощью VisualTreeHelper в точке существования объекта после применения шаблона (обработка загруженного события).
VisualTreeHelper использует метафору родительского ребенка для прогулки по дереву, а не с помощью концепции области имен XAML. Для прогулки по дереву обычно требуется определенное знание композиции элемента управления, так как оно происходит из заданного шаблона. Вы можете использовать VisualTreeHelper.GetChild в элементе управления, чтобы получить корневой каталог примененного шаблона элемента управления и вызвать
FindNameспециально корневой каталог шаблона для доступа к элементам, именуемым в XAML шаблона. - В случае XamlReader.Load следует сохранить ссылку на возвращаемое значение вызова XamlReader.Load , которое станет владельцем или базой созданного области имен XAML, соответствующей. Затем вызовите
FindNameиз этой области.
Возвращаемый FindName объектом не обязательно является FrameworkElement. Например, можно применить имя к раскадровке анимации, а различные типы раскадровки анимации не являются производными от FrameworkElement.
Свойство Name для объекта (или аналогичного атрибута x:Name) назначается путем указания атрибута для элемента объекта в разметке XAML. Значение Name можно задать после загрузки исходного исходного XAML, но этот метод имеет некоторые ограничения (см. примечания в имени).
TextElement определяет аналогичное FindName. Это обеспечивает поведение в объектной FindName модели, которая не ограничивается FrameworkElement. Вызовы любой FindName реализации могут проходить в смешанное дерево объектов элемента FrameworkElement / text, и использовать общую область имен XAML, чтобы FrameworkElement.FindName вызов смог найти именованный текстовый элемент и наоборот.
Значения имен , которые добавляются или изменяются во время выполнения в дереве объектов, будут обновляться в действивную область имен XAML на этом уровне в дереве объектов. Другими словами, если создать платформу FrameworkElement, присвойте ему имя, а затем добавьте его в дерево объектов, вызывая FindName из этой области имен XAML, можно найти и вернуть объект, созданный кодом.