FrameworkElement.FindName(String) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 식별자 이름이 있는 개체를 검색합니다.
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
요청된 개체의 이름입니다.
반환
요청된 개체입니다. 현재 XAML 이름 범위에서 일치하는 개체가 없으면 null일 수 있습니다.
설명
중요
메서드를 FindName
효과적으로 사용하려면 XAML 이름 범위의 개념과 XAML 로드 시간에 XAML 이름 범위를 만든 다음 런타임에 참조 및 수정하는 방법을 이해해야 합니다. 자세한 내용은 XAML 이름 범위를 참조하세요.
Windows 런타임 코드에서 의 FindName
가장 일반적인 사용법은 XAML 페이지에 대해 생성된 InitializeComponent
호출 내에서 사용됩니다. 이 경우 FindName
는 XAML 페이지가 로드된 후에만 호출됩니다.
InitializeComponent
는 XAML 로드로 인스턴스화된 모든 개체가 코드 숨김 코드에서 편리하게 액세스할 수 있도록 인프라를 제공합니다. 그런 다음 태그 선언 x:Name 특성과 동일한 이름을 공유하는 변수로 개체를 참조할 수 있습니다.
와 같은 FindName
런타임 API는 메모리에 있는 앱의 런타임 개체 트리에 대해 작동합니다. 템플릿 또는 런타임에 로드된 XAML에서 이 개체 트리의 일부를 만들 때 XAML 이름 범위는 일반적으로 해당 개체 트리 내에서 연속되지 않습니다. 그 결과 개체 트리에 지정된 scope 찾을 수 없는 명명된 FindName
개체가 있을 수 있습니다. 일반적인 애플리케이션 시나리오에서 발생할 수 있는 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을 정의합니다. 이렇게 하면 개체 모델에서 FrameworkElement로 제한되지 않는 동작을 사용할 FindName
수 있습니다. 의 FindName
구현 중 하나를 호출하면 혼합 FrameworkElement /텍스트 요소 개체 트리로 트래버스할 수 있으며, 호출에서 명명된 텍스트 요소를 찾을 수 있도록 FrameworkElement.FindName
공통 XAML 이름 범위를 사용하고 그 반대의 경우도 마찬가지입니다.
개체 트리에서 런타임에 추가되거나 변경된 이름 값은 개체 트리의 해당 수준에서 작동하는 XAML 이름 범위로 업데이트됩니다. 즉, 새 FrameworkElement를 만든 경우 이름을 지정한 다음 개체 트리에 추가합니다. XAML 이름 범위 내에서 를 호출 FindName
하면 코드에서 만든 개체를 찾아서 반환할 수 있습니다.