PropertyPath XAML 구문

PropertyPath개체는 XAML 형식을 해당 값으로 간주하는 다양한 속성을 설정하기 위한 복잡한 인라인 구문을 PropertyPath 지원합니다. 이 항목에서는 PropertyPath 바인딩 및 애니메이션 구문에 적용되는 구문을 문서화합니다.

PropertyPath를 사용하는 경우

PropertyPath 는 여러 기능에 사용되는 공통 WPF(Windows Presentation Foundation) 개체입니다. 공통을 사용하여 PropertyPath 속성 경로 정보를 전달하지만 가 형식으로 사용되는 각 기능 영역의 PropertyPath 사용법은 다양합니다. 따라서 구문은 기능별로 설명하는 것이 좋습니다.

주로 WPF 는 PropertyPath 를 사용하여 개체 데이터 원본의 속성을 트래버스하기 위한 개체 모델 경로를 설명하고 대상 애니메이션의 대상 경로를 설명합니다.

와 같은 일부 스타일 및 템플릿 Setter.Property 속성은 피상적으로 와 유사한 정규화된 속성 이름을 PropertyPath 갖습니다. 그러나 이것은 true가 아닙니다. 대신 에 PropertyPath 대한 형식 변환기와 함께 WPF 프로세서에서 사용할 수 있는 정규화된 owner.property 문자열 형식 사용입니다. XAML DependencyProperty

데이터 바인딩의 개체에 대한 PropertyPath

데이터 바인딩은 WPF 기능으로 이를 통해 종속성 속성의 대상 값에 바인딩할 수 있습니다. 하지만 해당 데이터 바인딩의 소스는 종속성 속성이어야 하며 적용 가능한 데이터 공급자가 인식하는 모든 속성 형식일 수 있습니다. 속성 경로는 ObjectDataProvider CLR(공용 언어 런타임) 개체 및 해당 속성에서 바인딩 소스를 가져오는 데 사용되는 에 특히 사용됩니다.

XML에 대한 데이터 바인딩은 에서 를 PropertyPath 사용하지 않으므로 를 사용하지 Path Binding 않습니다. 대신 를 사용하고 XPath 데이터의 XML DOM(문서 개체 모델)에 유효한 XPath 구문을 지정합니다. XPath은 문자열로도 지정되지만 여기에 설명되어 있지 않습니다. XMLDataProvider 및 XPath 쿼리를 사용하여 XML 데이터에 바인딩을 참조하세요.

데이터 바인딩의 속성 경로를 이해하는 열쇠는 개별 속성 값에 대한 바인딩을 대상으로 지정할 수 있거나 목록이나 컬렉션을 사용하는 대상 속성에 바인딩할 수 있다는 점입니다. 바인딩하는 경우 컬렉션을 바인딩하는 경우 예를 들어 ListBox 컬렉션에 있는 데이터 항목의 수에 따라 확장되는 은 속성 경로가 개별 컬렉션 항목이 아닌 컬렉션 개체를 참조해야 합니다. 데이터 바인딩 엔진은 데이터 원본으로 사용되는 컬렉션과 바인딩 대상의 형식을 자동으로 일치시키기 때문에 를 항목 배열로 채우는 등의 ListBox 동작이 발생합니다.

데이터 컨텍스트로서 직접 실행 개체에 대한 단일 속성

<Binding Path="propertyName" ... />

propertyName은 사용에 대해 현재 에 있는 속성의 이름으로 확인되어야 DataContext Path 합니다. 바인딩이 소스를 업데이트하면 해당 속성은 읽기/쓰기여야 하고 소스 개체는 변경 가능해야 합니다.

데이터 컨텍스트로서 직접 실행 개체에 대한 단일 인덱서

<Binding Path="[key]" ... />

key는 사전 및 해시 테이블에 대한 형식화된 인덱스이거나 배열의 정수 인덱스여야 합니다. 또한 키 값은 키 값이 적용되는 속성에 직접 바인딩할 수 있는 형식이어야 합니다. 예를 들어 문자열 키와 문자열 값이 포함된 해시 테이블을 이 방법으로 사용하여 의 Text에 바인딩할 수 TextBox 있습니다. 또는 키가 컬렉션이나 하위 인덱스를 가리키는 경우 이 구문을 사용하여 대상 컬렉션 속성에 바인딩할 수 있습니다. 이외의 경우에는 <Binding Path="[key].propertyName" .../>과 같은 구문을 통해 특정 속성을 참조해야 합니다.

필요한 경우 인덱스의 형식을 지정할 수 있습니다. 인덱싱된 속성 경로의 이러한 측면에 대한 자세한 내용은 를 Binding.Path 참조하세요.

다중 속성(간접 속성 대상 지정)

<Binding Path="propertyName.propertyName2" ... />

propertyName 는 현재 인 속성의 이름으로 확인되어야 DataContext 합니다. 경로 속성 propertyNamepropertyName2는 관계에 있는 속성일 수 있습니다. 여기서 propertyName2propertyName 값인 형식에 있는 속성입니다.

연결된 또는 정규화된 형식의 단일 속성

<object property="(ownerType.propertyName)" ... />

괄호는 의 이 속성이 PropertyPath 부분 한정자를 사용하여 생성되어야 함을 나타냅니다. XML 네임스페이스를 사용하여 적절한 매핑이 있는 형식을 찾을 수 있습니다. 는 ownerType XAML 각 어셈블리의 선언을 통해 프로세서가 액세스할 수 XmlnsDefinitionAttribute 있는 형식을 검색합니다. 대부분 애플리케이션에서는 기본 XML 네임스페이스가 http://schemas.microsoft.com/winfx/2006/xaml/presentation 네임스페이스에 매핑되므로 접두사는 대개 사용자 지정 형식 또는 해당 네임스페이스 외부의 형식에만 필요합니다. propertyNameownerType에 있는 속성의 이름으로 확인되어야 합니다. 일반적으로 이 구문은 다음 경우 중 하나에 사용됩니다.

  • 경로는 지정된 대상 형식이 없는 스타일 또는 템플릿인 XAML에 지정됩니다. 스타일이 아니고 템플릿이 아닌 경우에 속성은 형식이 아닌 인스턴스에 있으므로 일반적으로 이를 제외한 다른 경우에는 정규화된 사용이 적절하지 않습니다.

  • 속성은 연결된 속성입니다.

  • 정적 속성이 바인딩 중입니다.

Storyboard 대상으로 사용하려면 로 지정된 속성이 propertyName 이어야 DependencyProperty 합니다.

소스 순회(컬렉션 계층 구조에 바인딩)

<object Path="propertyName/propertyNameX" ... />

이 구문의 /는 계층적 데이터 소스 개체 내에서 탐색하는 데 사용되고 연속 / 문자가 있는 계층 구조에 대한 여러 단계는 지원되지 않습니다. 소스 순회는 데이터를 뷰의 UI와 동기화할 때 결정되는 현재 레코드 포인터 위치를 처리합니다. 계층적 데이터 소스 개체를 사용한 바인딩 및 데이터 바인딩의 현재 레코드 포인터 개념에 대한 자세한 내용은 계층적 데이터에 마스터-세부 패턴 사용 또는 데이터 바인딩 개요를 참조하세요.

참고

표면적으로 이 구문은 XPath와 유사합니다. XML 데이터 원본에 바인딩하기 위한 진정한 XPath 식은 값으로 사용되지 Path 않으며, 대신 상호 배타적인 속성에 사용해야 XPath 합니다.

컬렉션 뷰

명명된 컬렉션 뷰를 참조하려면 해시 문자(#)를 컬렉션 뷰 이름에 접두사로 추가합니다.

현재 레코드 포인터

컬렉션 뷰 또는 마스터 세부 데이터 바인딩 시나리오에 대한 현재 레코드 포인터를 참조하려면 경로 문자열을 슬래시(/)로 시작합니다. 슬래시를 통과하는 모든 경로는 현재 레코드 포인터부터 이동합니다.

여러 인덱서

<object Path="[index1,index2...]" ... />

또는

<object Path="propertyName[index,index2...]" ... />

특정 개체가 여러 인덱서를 지원할 경우 이러한 인덱서는 배열 참조 구문처럼 순서대로 지정될 수 있습니다. 해당 개체는 현재 컨텍스트이거나 여러 인덱스 개체를 포함하는 속성의 값일 수 있습니다.

기본적으로 인덱서 값은 기본 개체의 특징을 사용해서 형식화됩니다. 필요한 경우 인덱스의 형식을 지정할 수 있습니다. 인덱서 입력에 대한 자세한 내용은 를 Binding.Path 참조하세요.

구문 혼합

위에 표시되는 각 구문은 섞여 있을 수 있습니다. 예를 들어 다음은 개체의 픽셀 표 배열을 포함하는 속성의 특정 x,y에서 색에 대한 속성 경로를 만드는 예제입니다. ColorGrid SolidColorBrush

<Rectangle Fill="{Binding ColorGrid[20,30].SolidColorBrushResult}" ... />

속성 경로 문자열에 대한 이스케이프

특정 비즈니스 개체의 경우 제대로 구문 분석되려면 속성 경로 문자열에 이스케이프 시퀀스가 있어야 하는 경우가 있습니다. 이스케이프해야 하는 경우는 드뭅니다. 대부분의 이러한 문자에는 일반적으로 비즈니스 개체를 정의하는 데 사용되는 언어에 비슷한 명명 상호 작용 문제가 있기 때문입니다.

  • 인덱서([ ]) 안의 캐럿 문자(^)는 다음 문자를 이스케이프합니다.

  • XML 언어 정의와 관련된 특정 문자를 이스케이프(XML 엔터티 사용)해야 합니다. "&" 문자를 이스케이프하려면 &를 사용합니다. ">" 태그를 이스케이프하려면 >를 사용합니다.

  • 태그 확장을 처리하기 위해 WPF XAML 구문 분석기 동작과 관련된 특정 문자를 이스케이프해야 합니다(백슬래시 \ 사용).

    • 백슬래시(\)는 그 자체로 이스케이프 문자입니다.

    • 등호(=)는 속성 값에서 속성 이름을 구분합니다.

    • 쉼표(,)는 속성을 구분합니다.

    • 오른쪽 중괄호(})는 태그 확장의 끝입니다.

참고

기술적으로 이러한 이스케이프는 스토리보드 속성 경로에도 적용되지만 대개 기존 WPF 개체에 대한 개체 모델을 통과하므로 이스케이프가 필요하지 않습니다.

애니메이션 대상에 대한 PropertyPath

애니메이션의 대상 속성은 또는 기본 형식을 갖는 종속성 속성이어야 Freezable 합니다. 하지만 형식의 대상 속성 및 최종 애니메이션 효과가 적용된 속성은 서로 다른 개체에 있을 수 있습니다. 애니메이션에 대한 속성 경로는 속성 값에서 개체 속성 관계를 통과하는 방식으로 명명된 애니메이션 대상 개체의 속성과 의도한 대상 애니메이션 속성 간 연결을 정의하는 데 사용됩니다.

애니메이션에 대한 일반 개체 속성 고려 사항

일반적인 애니메이션 개념에 대한 자세한 내용은 Storyboard 개요애니메이션 개요를 참조하세요.

값 형식 또는 애니메이션 효과를 주게 되는 속성은 Freezable 형식 또는 기본 형식이어야 합니다. 경로를 시작하는 속성은 지정된 형식에 있는 종속성 속성의 이름으로 확인되어야 TargetName 합니다.

이미 고정된 에 애니메이션을 주는 복제를 지원하려면 에 Freezable 지정된 개체가 TargetName 또는 파생 FrameworkElement FrameworkContentElement 클래스여야 합니다.

대상 개체에 대한 단일 속성

<animation Storyboard.TargetProperty="propertyName" ... />

propertyName 는 지정된 형식에 있는 종속성 속성의 이름으로 확인되어야 TargetName 합니다.

간접 속성 대상 지정

<animation Storyboard.TargetProperty="propertyName.propertyName2" ... />

propertyName 값 형식 또는 지정된 Freezable 형식에 있는 기본 형식인 속성이어야 TargetName 합니다.

propertyName2propertyName 값인 개체에 있는 종속성 속성의 이름이어야 합니다. 즉, 는 propertyName2 형식에 대한 종속성 속성으로 존재해야 propertyName PropertyType 합니다.

적용된 스타일 및 템플릿 때문에 애니메이션의 간접 대상 지정이 필요합니다. 애니메이션을 대상으로 하려면 대상 TargetName 개체에 가 필요하며 해당 이름은 x:Name 또는 에 의해 설정됩니다. Name 템플릿 및 스타일 요소에 이름이 있을 수 있지만 해당 이름은 스타일 및 템플릿의 네임스페이스 내에서만 유효합니다. 템플릿 및 스타일이 네임스페이스를 애플리케이션 태그와 공유한 경우 이름이 고유하지 않습니다. 스타일과 템플릿은 인스턴스 간에 문자 그대로 공유되며 중복된 이름을 지속합니다.) 따라서 애니메이션을 적용할 수 있는 요소의 개별 속성이 스타일 또는 템플릿에서 온 경우 스타일 템플릿이 아닌 명명된 요소 인스턴스로 시작한 다음 스타일 또는 템플릿 시각적 트리를 대상으로 하여 애니메이션을 적용하려는 속성에 도달해야 합니다.

예를 들어 의 Background Panel 속성은 Brush 테마 템플릿에서 온 완전한(실제로는 SolidColorBrush )입니다. 에 완전히 애니메이션을 적용하려면 Brush BrushAnimation(모든 형식에 대해 Brush 하나씩)이 있어야 하며 이러한 형식은 없습니다. Brush에 애니메이션을 적용하려면 대신 특정 형식의 속성에 애니메이션을 Brush 적용합니다. 를 적용하려면 에서 로 가 있어야 SolidColorBrush Color ColorAnimation 합니다. 이 예제의 속성 경로는 Background.Color입니다.

연결된 속성

<animation Storyboard.TargetProperty="(ownerType.propertyName)" ... />

괄호는 의 이 속성이 PropertyPath 부분 한정자를 사용하여 생성되어야 함을 나타냅니다. XML 네임스페이스를 사용하여 형식을 찾을 수 있습니다. 는 ownerType XAML 각 어셈블리의 선언을 통해 프로세서가 액세스할 수 XmlnsDefinitionAttribute 있는 형식을 검색합니다. 대부분 애플리케이션에서는 기본 XML 네임스페이스가 http://schemas.microsoft.com/winfx/2006/xaml/presentation 네임스페이스에 매핑되므로 접두사는 대개 사용자 지정 형식 또는 해당 네임스페이스 외부의 형식에만 필요합니다. propertyNameownerType에 있는 속성의 이름으로 확인되어야 합니다. 로 지정된 속성은 propertyName 이어야 DependencyProperty 합니다. 모든 WPF 연결된 속성은 종속성 속성으로 구현되므로 이 문제는 사용자 지정 연결된 속성에만 관련됩니다.

인덱서

<animation Storyboard.TargetProperty="propertyName.propertyName2[index].propertyName3" ... />

대부분의 종속성 속성 또는 Freezable 형식은 인덱서가 지원되지 않습니다. 따라서 애니메이션 경로에서 인덱서는 명명된 대상에서 체인을 시작하는 속성과 최종 애니메이션 효과가 적용된 속성 사이의 중간 위치에만 사용됩니다. 제공된 구문에서 인덱서는 propertyName2입니다. 예를 들어 중간 속성이 와 같은 속성 경로에 있는 와 같은 컬렉션인 경우 인덱서 사용이 필요할 수 TransformGroup RenderTransform.Children[1].Angle 있습니다.

코드의 PropertyPath

를 구성하는 방법을 포함하여 에 대한 코드 PropertyPath PropertyPath 사용법은 에 대한 참조 항목에 설명되어 PropertyPath 있습니다.

일반적으로 PropertyPath 는 바인딩 사용 및 가장 간단한 애니메이션 사용과 복잡한 애니메이션 사용에 대해 하나씩 두 개의 서로 다른 생성자를 사용하도록 설계되었습니다. 바인딩 PropertyPath(Object) 사용에 서명을 사용합니다. 여기서 개체는 문자열입니다. PropertyPath(Object)1단계 애니메이션 경로에 대한 서명을 사용합니다. 여기서 개체는 DependencyProperty 입니다. 복합 PropertyPath(String, Object[]) 애니메이션에 서명을 사용합니다. 후자의 생성자는 첫 번째 매개 변수에 토큰 문자열을 사용하고 속성 경로 관계를 정의하기 위해 토큰 문자열의 위치를 채우는 개체 배열을 사용합니다.

참고 항목