x:Name 특성
코드 숨김 또는 일반 코드에서 인스턴스화된 개체에 액세스하기 위한 개체 요소를 고유하게 식별합니다. 백업 프로그래밍 모델에 적용된 후 x:Name 은 생성자가 반환한 대로 개체 참조를 보유하는 변수와 동일한 것으로 간주될 수 있습니다.
XAML 특성 사용
<object x:Name="XAMLNameValue".../>
XAML 값
용어 | 설명 |
---|---|
XAMLNameValue | XamlName 문법의 제한을 따르는 문자열입니다. |
XamlName 문법
다음은 이 XAML 구현에서 키로 사용되는 문자열에 대한 표준 문법입니다.
XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
- 문자는 낮은 ASCII 범위에 있는 알파벳 대/소문자, 숫자 및 밑줄(_) 문자로 제한됩니다.
- 유니코드 문자 범위는 지원되지 않습니다.
- 이름은 숫자로 시작될 수 없습니다. 일부 도구 구현에서는 사용자가 최초 문자로 숫자를 입력하거나, 도구가 숫자를 포함하는 다른 값을 기반으로 x:Name 값을 자동으로 생성하는 경우 문자열 앞에 밑줄(_)이 붙습니다.
설명
지정한 x:Name 은 XAML이 처리될 때 기본 코드에서 생성되고 해당 필드에 개체에 대한 참조가 있는 필드의 이름이 됩니다. 이 필드를 만드는 프로세스는 XAML 파일 및 해당 코드 숨김에 대한 부분 클래스를 조인하는 MSBuild 대상 단계에 의해 수행됩니다. 이 동작이 반드시 XAML 언어로 지정된 것은 아닙니다. XAML에 대한 유니버설 Windows 플랫폼(UWP) 프로그래밍이 프로그래밍 및 애플리케이션 모델에서 x:Name을 사용하기 위해 적용되는 특정 구현입니다.
정의된 각 x:Name 은 XAML 이름 범위 내에서 고유해야 합니다. 일반적으로 XAML 이름 범위는 로드된 페이지의 루트 요소 수준에서 정의되며 단일 XAML 페이지의 해당 요소 아래에 있는 모든 요소를 포함합니다. 추가 XAML 이름 범위는 해당 페이지에 정의된 컨트롤 템플릿 또는 데이터 템플릿에 의해 정의됩니다. 런타임에 적용된 컨트롤 템플릿에서 만든 개체 트리의 루트 및 XamlReader.Load 호출에서 만든 개체 트리에 대해 다른 XAML 이름 범위가 만들어집니다. 자세한 내용은 XAML 이름 스코프를 참조 하세요.
디자인 도구는 디자인 화면에 도입될 때 요소의 x:Name 값을 자동으로 생성합니다. 자동 생성 구성표는 사용 중인 디자이너에 따라 다르지만, 일반적인 구성표는 요소를 백업하는 클래스 이름으로 시작하는 문자열을 생성한 다음 정수로 진행하는 것입니다. 예를 들어 디자이너에 첫 번째 Button 요소를 도입하면 XAML에서 이 요소 의 x:Name 특성 값이 "Button1"인 것을 볼 수 있습니다.
x:Name은 XAML 속성 요소 구문이나 SetValue를 사용하는 코드에서 설정할 수 없습니다. x:Name 은 요소에서 XAML 특성 구문을 사용하여 설정할 수 있습니다.
특히 C++/CX 앱의 경우 x:Name 참조에 대한 지원 필드는 XAML 파일 또는 페이지의 루트 요소에 대해 만들어지지 않습니다. C++ 코드 숨김에서 루트 개체를 참조해야 하는 경우 다른 API 또는 트리 순회를 사용합니다. 예를 들어 알려진 명명된 자식 요소에 대해 FindName을 호출한 다음 Parent를 호출할 수 있습니다.
x:Name 및 기타 이름 속성
UWP XAML에서 사용되는 일부 형식에는 Name이라는 속성도 있습니다. 예를 들어 FrameworkElement.Name 및 TextElement.Name.
Name을 요소에서 settable 속성으로 사용할 수 있는 경우 Name과 x:Name은 XAML에서 서로 바꿔 사용할 수 있지만 두 특성이 동일한 요소에 지정되면 오류가 발생합니다. Name 속성이 있지만 읽기 전용인 경우도 있습니다(예: VisualState.Name). 이 경우 항상 x:Name을 사용하여 XAML에서 해당 요소의 이름을 지정하고 읽기 전용 이름은 덜 일반적인 코드 시나리오에 대해 존재합니다.
FrameworkElement.Name 일반적으로 x:Name으로 설정된 값을 변경하는 방법으로 사용해서는 안 됩니다. 단, 해당 일반 규칙에 대한 예외가 있는 몇 가지 시나리오가 있습니다. 일반적인 시나리오에서 XAML 이름 범위의 생성 및 정의는 XAML 프로세서 작업입니다. 런타임에 FrameworkElement.Name 수정하면 일관되지 않은 XAML 이름 범위/프라이빗 필드 명명 맞춤이 발생할 수 있으며 코드 숨김에서 추적하기 어렵습니다.
x:Name 및 x:Key
x:Name은 ResourceDictionary 내의 요소에 특성으로 적용하여 x:Key 특성의 대체 역할을 할 수 있습니다. (ResourceDictionary의 모든 요소에는 x:Key 또는 x:Name 특성이 있어야 합니다.) 이는 스토리보드 애니메이션에서 일반적입니다. 자세한 내용은 ResourceDictionary 및 XAML 리소스 참조의 구간을 확인하세요.