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

Имя запрошенного объекта.

Возвращаемое значение

Object

Platform::Object

IInspectable

Запрошенный объект. Это может быть 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, можно найти и вернуть объект, созданный кодом.

Применяется к

См. также раздел