FrameworkElement.Name 속성

2013-12-13

개체의 이름을 가져오거나 설정합니다. XAML 프로세서가 XAML 태그에서 개체 트리를 만든 경우 런타임 코드에서 이 이름으로 XAML 선언 개체를 참조할 수 있습니다.

Namespace:  System.Windows
어셈블리:  System.Windows(System.Windows.dll)
XMLNS for XAML: xmlns에 매핑되지 않습니다.

public string Name { get; set; }
<frameworkElement Name="xamlNameString"/>

속성 값

형식: System.String
개체 이름이며, XamlName 문법에서 유효한 문자열이어야 합니다. 기본값은 빈 문자열입니다.

종속성 속성 식별자 필드: NameProperty

이 속성은 일반적으로 Windows Phone 응용프로그램에 대해 처음 로드된 XAML 태그의 개체에 Name 특성을 지정할 때 사용됩니다.

Name에 사용되는 문자열 값에는 XAML 사양에서 정의하는 내부 x:Name에 의해 몇 가지 제한이 적용됩니다. 그 중 가장 대표적인 제한으로는 Name이 문자 또는 밑줄 문자(_)로 시작해야 하며 문자, 숫자 및 밑줄만을 포함해야 한다는 것을 들 수 있습니다.

이 속성은 XAML 언어 x:Name 특성의 Windows Phone 관련 동등 항목을 설정하거나 가져오는 편리한 속성을 제공합니다. x:Name은 XAML 프로세서가 XAML 태그에서 개체 트리를 생성할 때 사용합니다. XAML 프로세서에서 XAML에 대한 기본 컴파일 빌드 작업을 Windows Phone 프로젝트의 Page로 사용하면 필드 참조를 생성하는 개체 트리가 만들어집니다. 필드 참조는 페이지별 코드 숨김에서 이름으로 직접 개체를 참조할 수 있는 프로그래밍 모델을 가능하게 합니다.

참고참고:

필드 참조를 생성하고 이벤트 연결을 추가하기 위해 로드 전에 XAML을 사전 처리하는 빌드 작업을 이 문서에서는 태그 컴파일이라고도 합니다.

대개의 경우 x:Name 특성과 Name 속성은 동일합니다. 코드에서 Name을 가져와 x:Name로 설정된 값을 가져올 수 있습니다. x:NameName은 XAML 특성으로 함께 사용할 수 없습니다. 태그의 같은 개체 요소에 x:NameName 특성을 모두 설정하려고 하면 파서 오류가 발생합니다.

참고참고:

XAML에서는 NameDependencyObject의 특성으로 허용합니다. 이는 FrameworkElement를 구문 분석 동작으로 허용하는 것과는 대조됩니다. 그러나 이 동작은 관리 코드 API로 확장되지 않으며 XAML을 사용하거나 생성할 수 있는 모든 도구에서 완전하게 지원되지 않을 수도 있습니다.

이름은 XAML 이름 범위에서 고유해야 합니다. 일반적으로 XAML 이름 범위는 XAML 페이지에서 정의되지만, 템플릿과 같은 특정 기능이나 Load 같은 API 호출에서 별도의 XAML 이름 범위를 정의할 수 있습니다.

중요중요:

Name은 지역화해서는 안 됩니다. Name은 코드 숨김에서 코드 변수로 사용됩니다. 일반적으로 배포 모델과 지역화 절차에 따라 다르기는 하지만 UI를 정의하는 XAML 파일에 액세스할 수 지역화 담당자는 이러한 코드에 액세스할 수 없습니다. 이는 UI에 있는 Name에서 제공되는 임의의 문자열을 표시하지 말아야 하는 이유 중 하나입니다.

이름에 대한 시나리오

UI 요소를 정의하는 Name을 XAML로 설정하는 것은 다음과 같은 몇 가지 주요 시나리오를 지원합니다.

  • 애니메이션 대상 지정: 개체 속성에 애니메이션을 적용하려면 특정 인스턴스를 대상으로 해야 합니다. TimelineStoryboard.TargetName 연결된 속성을 설정하여 이 작업을 수행합니다. 여기서 설정한 값은 Name으로 지정된 문자열입니다.

  • 컨트롤 템플릿의 부분: 시각적 상태 모델을 지원하고 초기화를 제어하기 위해 컨트롤 작성자는 템플릿 적용이 가능한 컨트롤의 주요 부분에 대해 Name 값을 지정해야 합니다.

  • 일반 런타임 상호 작용: 예를 들어 이벤트 처리기 내의 코드는 변경 UI를 제공하는 개체에 대한 이벤트를 처리할 수 있지만 인접한 다른 UI 요소에서 발생하는 속성에 대한 변경이 발생합니다. 이런 상황에 대한 코드를 작성하는 가장 쉬운 방법은 Name에서 생성된 필드 참조를 사용하는 것입니다.

XamlReader.Load에 대한 XAML의 이름

Load에 대한 입력의 일부인 요소에 Name 또는 x:Name을 지정할 수 있습니다. 그러나 이렇게 생성된 이름은 제공된 XAML 입력의 루트로만 확장되는 별개의 XAML 이름 범위에 저장됩니다. 이는 Load를 호출한 다음 생성된 개체를 주 개체 트리에 추가할 경우 FindName을 호출하는 방법 및 어떤 개체 범위에서 이를 호출해야 하는지에 영향을 줍니다.

Name은 CLR 속성 바인딩 소스에 대한 직접 소스 값으로 사용할 수 없습니다. 동일한 문자열 값을 바인딩을 통해 UI에서 Name으로 표시해야 할 경우 속성 바인딩 소스로 사용할 수 있는 Tag 속성에 동일한 값을 복제해야 합니다. 또한 Name은 바인딩 대상으로 사용하지 않아야 합니다.

참고참고:

NameElementName 바인딩에 대한 소스 한정자로 사용할 수 있지만, 이는 Name의 문자열 값을 직접 소스로 사용할 때의 제한과는 다른 개념입니다.

FindName

모든 FrameworkElement에서 사용할 수 있는 유틸리티 메서드 FindName은 개체가 현재 XAML 이름 범위에 있는 한 Name을 기준으로 개체 트리에서 개체를 찾을 수 있습니다. FindName은 XAML에서 생성된 개체 트리 전체를 검색합니다. 기술적으로, FindName이 실제로 검색하는 항목은 트리를 유지하지 않고 대신 이름의 해시 테이블로 표현되는 XAML 이름 범위입니다. FindName은 적용된 템플릿에 정의되어 있는 이름을 찾을 수 없습니다.

코드에서 이름 설정

런타임에 개체의 Name 값을 설정할 수 있지만 주의해야 하는 몇 가지 중요한 고려 사항과 제한 사항이 있습니다.

개체에 XAML에서 설정된 이전 Name 값이 있는 경우 일반적으로 코드에서 런타임에 Name 값을 변경하지 않는 것이 좋습니다. 이는 개체 트리가 로드된 후 이름을 설정할 경우 해당하는 필드 참조의 식별 이름이 생성 또는 변경되지 않기 때문입니다. Name이 초기 태그에 제공되어 필드 참조가 이미 있는데 Name의 값을 변경하는 경우에는 필드가 태그 정의 이름으로 유지되기 때문에 FindName을 통해 개체를 찾기 위해 사용해야 하는 필드와 이름이 서로 다릅니다.

코드에서 만들어져 XAML에서 정의된 Name 값이 없는 개체에 대해 Name 값을 설정하는 것은 특정 시나리오에 적합합니다. 이러한 시나리오 중 하나는 FindName을 일반적인 유틸리티 함수로 사용하여 XAML에서 만든 개체나 코드에서 만든 개체를 트리에서 찾을 수 있도록 하려는 경우입니다. 해당 시나리오가 작동하도록 Windows Phone은 런타임에 XAML 이름 범위 개념을 계속해서 사용하고 추가합니다. 대체로 XAML에서 만든 기존 개체 트리에 새 명명된 개체를 추가하려는 경우 이름이 고유해야 합니다. 그렇지 않으면 중복 이름 예외가 발생합니다. 방금 인스턴스 화한 개체에 Name을 설정하는 경우에는 Name을 설정하려고 해도 중복 이름 예외가 발생하지 않을 수도 있습니다. 주 개체 트리에 중복 이름 개체를 추가하기 전에는 새 개체에 독립적인 XAML 이름 범위가 있습니다. 개체를 큰 개체 트리에 연결할 때만 XAML 이름 범위 조건의 중복 이름을 검색할 수 있습니다. 주 개체 트리에 연결하는 컬렉션의 Add 메서드 호출 등 트리의 개체를 연결한 작업에서 예외가 발생할 수도 있습니다. 나중에 새 개체를 추가할 XAML 이름 범위에 이미 있는 Name 값을 확인하기 어려울 수 있습니다. XAML 이름 범위에 있는 기존 이름의 전체 해시 테이블을 보고하는 특정 API는 없습니다. 코드에서 Name 값을 광범위하게 설정하는 경우 런타임 사용에 고유한 이름 문자열을 생성하는 방법이 필요하거나, 중복 이름에서 발생할 수 있는 예외를 catch하기 위해 try-catch 블록에 새로 명명된 개체를 추가하는 호출을 래핑해야 할 수 있습니다.

FrameworkElement 또는 Inline인 개체에 대해서만 런타임에 Name을 설정할 수 있습니다. 개체에 Name 속성이 없고 XAML에서 이름을 설정하기 위해 Name 대신 x:Name 특성을 사용해야 하는 경우 해당 개체의 런타임 이름을 설정하는 데 사용할 수 있는 런타임 API는 없습니다.

ElementName 바인딩

Name 또는 x:Name 값은 ElementName 바인딩의 소스 요소를 식별하는 데 사용하는 식별자입니다. ElementName 바인딩 방법에 대한 자세한 내용은 ElementName 또는 Windows Phone의 데이터 바인딩을 참조하세요.

Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시:
© 2014 Microsoft