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

요청된 개체입니다. 현재 XAML 이름 범위에서 일치하는 개체를 찾을 수 없는 경우 null일 수 있습니다.

설명

중요

FindName 메서드를 효과적으로 사용하려면 XAML 이름 범위의 개념과 XAML 로드 시간에 XAML 이름 범위를 만든 다음 런타임에 참조 및 수정하는 방법을 이해해야 합니다. 자세한 내용은 XAML 이름 범위를 참조하세요.

Windows 런타임 코드에서 FindName의 가장 일반적인 사용법은 XAML 페이지에 대해 생성된 InitializeComponent 호출 내에서 사용됩니다. 이 경우 FindName은 XAML 페이지가 로드된 후에만 호출됩니다. InitializeComponent 는 XAML 로드로 인스턴스화된 모든 개체가 코드 숨김 코드에서 편리하게 액세스할 수 있도록 인프라를 제공합니다. 그런 다음 태그 선언 x:Name 특성과 동일한 이름을 공유하는 변수로 개체를 참조할 수 있습니다.

FindName과 같은 런타임 API는 메모리에 있는 앱의 런타임 개체 트리에 대해 작동합니다. 템플릿 또는 런타임 로드된 XAML에서 이 개체 트리의 일부를 만들 때 XAML 이름 범위는 일반적으로 해당 개체 트리 내에서 연속되지 않습니다. 그 결과 지정된 FindName scope 찾을 수 없는 명명된 개체가 개체 트리에 있을 수 있습니다. 일반적인 애플리케이션 시나리오에서 발생할 수 있는 XAML 이름 범위 간의 불연속성은 템플릿을 적용하여 개체를 만들거나 XamlReader.Load 를 호출하여 개체를 만들고 이후에 개체 트리에 추가할 때입니다.

FindName에 대한 예기치 않은 null 결과를 반환하는 경우 다음 기술을 사용해 보세요.

  • 템플릿에서 가져온 명명된 개체의 경우 컨트롤을 정의하거나 파생하는 경우 템플릿이 적용되는 개체의 scope GetTemplateChild를 호출할 수 있습니다. GetTemplateChild는 Control의 보호된 메서드이므로 GetTemplateChild를 사용하려면 파생 클래스 정의 scope 있어야 합니다.
  • 파생 클래스 정의 scope 없는 경우 템플릿이 적용된 후 개체 수명 시점에서 VisualTreeHelper를 사용하여 템플릿의 시각적 트리를 입력할 수 있습니다(Loaded 이벤트 처리). VisualTreeHelper 는 XAML 이름 범위 개념을 사용하는 대신 트리를 걷기 위해 부모-자식 은유를 사용합니다. 트리를 걷려면 일반적으로 지정된 템플릿에서 가져온 컨트롤의 컴퍼지션에 대한 특정 지식이 필요합니다. 컨트롤에서 VisualTreeHelper.GetChild 를 사용하여 컨트롤의 적용된 템플릿 루트를 가져와 템플릿 루트에서 FindName을 호출하여 템플릿 XAML 내에서 명명된 요소에 액세스할 수 있습니다.
  • XamlReader.Load 사례의 경우 XamlReader.Load 호출의 반환 값에 대한 참조를 유지해야 합니다. 이 호출은 관련된 생성된 XAML 이름 범위의 소유자 또는 기초가 되는 개체입니다. 그런 다음, 대신 해당 scope FindName을 호출합니다.

FindName에서 반환된 개체가 FrameworkElement일 필요는 없습니다. 예를 들어 애니메이션 스토리보드에 이름을 적용할 수 있으며 다양한 애니메이션 스토리보드 형식은 FrameworkElement에서 파생되지 않습니다.

개체의 Name 속성(또는 유사한 x:Name 특성)은 XAML 태그의 개체 요소에 특성을 지정하여 할당됩니다. 초기 원본 XAML이 로드된 후 Name 값을 설정할 수 있지만 이 기술에는 몇 가지 제한 사항이 있습니다( 이름 설명 참조).

TextElement 는 유사한 FindName을 정의합니다. 이렇게 하면 개체 모델에서 FindName 동작이 가능하며 FrameworkElement로 제한되지 않습니다. FindName 구현에 의한 호출은 혼합 FrameworkElement/text 요소 개체 트리로 트래버스할 수 있으며, FrameworkElement.FindName 호출이 명명된 텍스트 요소를 찾을 수 있도록 공통 XAML 이름 범위를 사용할 수 있으며 그 반대의 경우도 마찬가지입니다.

개체 트리에서 런타임에 추가되거나 변경되는 이름 값은 개체 트리의 해당 수준에서 작동하는 XAML 이름 범위로 업데이트됩니다. 즉, 새 FrameworkElement를 만드는 경우 이름을 지정한 다음 개체 트리에 추가합니다. XAML 이름 범위 내에서 FindName을 호출하면 코드에서 만든 개체를 찾아서 반환할 수 있습니다.

적용 대상

추가 정보