x:Name 지시문
XAML 이름 범위에서 XAML 정의 요소를 고유하게 식별합니다. 프레임워크가 API를 제공하거나 런타임에 XAML에서 만든 개체 그래프에 액세스하는 동작을 구현할 때 XAML 이름 범위 및 고유성 모델을 인스턴스화된 개체에 적용할 수 있습니다.
XAML 특성 사용
<object x:Name="XAMLNameValue".../>
XAML 값
값 | 묘사 |
---|---|
XAMLNameValue |
XamlName 문법제한을 준수하는 문자열입니다. |
발언
x:Name
프레임워크의 지원 프로그래밍 모델에 적용된 후 이름은 생성자가 반환한 개체 참조 또는 인스턴스를 보유하는 변수와 동일합니다.
x:Name
지시문 사용의 값은 XAML 이름 범위 내에서 고유해야 합니다. 기본적으로 .NET XAML Services API에서 사용하는 경우 기본 XAML 이름 범위는 단일 XAML 프로덕션의 XAML 루트 요소에 정의되며 해당 XAML 프로덕션에 포함된 요소를 포함합니다. 단일 XAML 프로덕션 내에서 발생할 수 있는 추가 개별 XAML 이름 범위는 프레임워크에서 정의하여 특정 시나리오를 해결할 수 있습니다. 예를 들어 WPF에서 새 XAML 이름 범위는 해당 XAML 프로덕션에 정의된 템플릿에 의해 정의되고 만들어집니다. XAML 이름 범위(WPF용으로 작성되었지만 많은 XAML 이름 범위 개념과 관련됨)에 대한 자세한 내용은 WPF XAML 이름 범위참조하세요.
일반적으로 x:Name
x:Key
사용하는 상황에서는 적용되지 않아야 합니다. 특정 기존 프레임워크의 XAML 구현은 x:Key
x:Name
간에 대체 개념을 도입했지만 권장되는 방법은 아닙니다. .NET XAML Services는 INameScope 또는 DictionaryKeyPropertyAttribute같은 이름/키 정보를 처리할 때 이러한 대체 개념을 지원하지 않습니다.
이름 고유성 적용뿐만 아니라 x:Name
허용에 대한 규칙은 잠재적으로 특정 구현 프레임워크에 의해 정의됩니다. 그러나 .NET XAML 서비스에서 사용할 수 있도록 XAML 이름 범위 고유성에 대한 프레임워크 정의는 이 설명서의 INameScope 정보의 정의와 일치해야 하며 정보가 적용되는 위치와 동일한 규칙을 사용해야 합니다. 예를 들어 WPF(Windows Presentation Foundation) 구현은 리소스 사전, 페이지 수준 XAML, 템플릿 및 기타 지연된 콘텐츠에서 만든 논리 트리와 같은 다양한 태그 요소를 별도의 NameScope 범위로 나눕니다. 그런 다음 각 XAML 이름 범위 내에서 XAML 이름 고유성을 적용합니다.
.NET XAML Services XAML 개체 작성기를 사용하는 사용자 지정 형식의 경우 형식의 x:Name
매핑되는 속성을 설정하거나 변경할 수 있습니다. 형식 정의 코드의 RuntimeNamePropertyAttribute 매핑할 속성의 이름을 참조하여 이 동작을 정의합니다.
RuntimeNamePropertyAttribute 형식 수준 특성입니다.
XAML Services를 Using.NET XAML 이름 범위 지원에 대한 지원 논리는 INameScope 인터페이스를 구현하여 프레임워크 중립적인 방식으로 정의할 수 있습니다.
WPF 사용 현황 정보
XAML, 부분 클래스 및 코드 숨김을 사용하는 WPF 애플리케이션에 대한 표준 빌드 구성에서 지정된 x:Name
XAML이 태그 컴파일 빌드 작업에서 처리될 때 기본 코드에서 생성되는 필드의 이름이 되고 해당 필드에는 개체에 대한 참조가 포함됩니다. 기본적으로 생성된 필드는 내부 필드입니다.
x:FieldModifier 특성지정하여 필드 액세스를 변경할 수 있습니다. WPF 및 Silverlight에서 시퀀스는 태그 컴파일이 부분 클래스의 필드를 정의하고 이름을 지정하지만 값은 처음에 비어 있다는 것입니다. 그런 다음 InitializeComponent
라는 생성된 메서드가 클래스 생성자 내에서 호출됩니다.
InitializeComponent
부분 클래스의 XAML 정의 부분에 있는 각 x:Name
값을 입력 문자열로 사용하는 FindName
호출로 구성됩니다. 그런 다음 반환 값이 명명된 필드 참조에 할당되어 XAML 구문 분석에서 만든 개체로 필드 값을 채웁니다.
InitializeComponent
실행하면 XAML 정의 개체에 대한 참조가 필요할 때마다 명시적으로 FindName
호출하지 않고도 x:Name
/필드 이름을 사용하여 런타임 개체 그래프를 직접 참조할 수 있습니다.
Microsoft Visual Basic 대상을 사용하고 Page
빌드 작업이 포함된 XAML 파일을 포함하는 WPF 애플리케이션의 경우 컴파일 중에 이벤트 처리기 대리자의 Handles
구문을 지원하기 위해 x:Name
있는 모든 요소에 WithEvents
키워드를 추가하는 별도의 참조 속성이 만들어집니다. 이 속성은 항상 공용입니다. 자세한 내용은 visual Basic 및 WPF 이벤트 처리
x:Name
빌드 작업(예: 리소스 사전의 느슨한 XAML)에 의해 페이지가 태그 컴파일되지 않은 경우에도 로드 시 XAML 이름 범위에 이름을 등록하기 위해 WPF XAML 프로세서에서 사용됩니다. 이 동작의 한 가지 이유는 ElementName 바인딩에 x:Name
필요할 수 있기 때문입니다. 자세한 내용은 데이터 바인딩 개요참조하세요.
앞에서 설명한 것처럼 x:Name
(또는 Name
)도 x:Key
사용하는 상황에서는 적용되지 않아야 합니다. WPF ResourceDictionary XAML 이름 범위로 정의하지만 이 동작을 적용하는 방법으로 INameScope API에 대해 구현되지 않음 또는 null 값을 반환하는 특별한 동작이 있습니다. WPF XAML 파서가 XAML 정의 ResourceDictionaryName
또는 x:Name
발견하면 이름은 XAML 이름 범위에 추가되지 않습니다. XAML 이름 범위 및 FindName
메서드에서 해당 이름을 찾으려고 하면 유효한 결과가 반환되지 않습니다.
x:Name 및 Name
FrameworkElement 및 FrameworkContentElement 같은 몇 가지 중요한 기본 클래스에 대해 기본 XAML 네임스페이스에 지정된 Name
종속성 속성이 동일한 용도를 충족하므로 많은 WPF 애플리케이션 시나리오에서 x:Name
특성을 사용하지 않도록 방지할 수 있습니다. 프레임워크 수준에서 Name
속성이 없는 요소에 대한 코드 액세스가 중요한 몇 가지 일반적인 XAML 및 WPF 시나리오가 여전히 있습니다. 예를 들어 특정 애니메이션 및 스토리보드 지원 클래스는 Name
속성을 지원하지 않지만 애니메이션을 제어하기 위해 코드에서 참조해야 하는 경우가 많습니다. 나중에 코드에서 참조하려는 경우 XAML에서 만든 타임라인 및 변환에 x:Name
특성으로 지정해야 합니다.
Name 클래스에서 속성으로 사용할 수 있는 경우 Name 및 x:Name
특성으로 서로 바꿔 사용할 수 있지만 둘 다 동일한 요소에 지정되면 구문 분석 예외가 발생합니다. XAML이 태그를 컴파일하면 태그 컴파일에서 예외가 발생하고, 그렇지 않으면 로드 시 발생합니다.
Name XAML 특성 구문을 사용하고 코드에서 SetValue;를 사용하여 설정할 수 있습니다. 그러나 코드에서 Name 속성을 설정해도 XAML이 이미 로드된 대부분의 경우 XAML 이름 범위 내에서 대표 필드 참조가 만들어지지는 않습니다. 코드에서 Name 설정하는 대신 적절한 이름 범위에 대해 코드의 NameScope 메서드를 사용합니다.
Name 내부 텍스트와 함께 속성 요소 구문을 사용하여 설정할 수도 있지만 일반적으로는 아닙니다. 반면, x:Name
XAML 속성 요소 구문이나 SetValue사용하여 코드에서 설정할 수 없습니다. 지시문이므로 개체에 특성 구문을 사용하여 설정할 수 있습니다.
Silverlight 사용 현황 정보
Silverlight에 대한 x:Name
별도로 문서화됩니다. 자세한 내용은 XAML 네임스페이스(x:) 언어 기능(Silverlight)참조하세요.
참고 항목
.NET Desktop feedback