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 не найден соответствующий объект.

Комментарии

Важно!

Чтобы эффективно использовать 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 в момент времени существования объекта после применения шаблона (обработайте событие Loaded). 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 или текстового элемента и использовать общую область имен XAML, FrameworkElement.FindName чтобы вызов смог найти именованный текстовый элемент и наоборот.

Значения имен , которые добавляются или изменяются во время выполнения в дереве объектов, будут обновляться в действующей области имен XAML на этом уровне в дереве объектов. Иными словами, если создать объект FrameworkElement, присвоить ему имя, а затем добавить его в дерево объектов. Вызов FindName из этой области имен XAML может найти и вернуть созданный кодом объект.

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

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