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 не найден соответствующий объект.
Комментарии
Важно!
Чтобы эффективно использовать 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 может найти и вернуть созданный кодом объект.