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