{RelativeSource} 태그 확장
런타임 개체 그래프의 상대 관계 측면에서 바인딩의 원본을 지정하는 방법을 제공합니다.
XAML 특성 사용량(자체 모드)
<Binding RelativeSource="{RelativeSource Self}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>
XAML 특성 사용량(TemplatedParent 모드)
<Binding RelativeSource="{RelativeSource TemplatedParent}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>
XAML 값
용어 | 설명 |
---|---|
{RelativeSource Self(자체)} | Self의 모드 값을 생성합니다. 대상 요소는 이 바인딩의 원본으로 사용해야 합니다. 이는 요소의 한 속성을 동일한 요소의 다른 속성에 바인딩하는 데 유용합니다. |
{RelativeSource TemplatedParent} | 이 바인딩의 소스로 적용되는 ControlTemplate 을 생성합니다. 이는 템플릿 수준의 바인딩에 런타임 정보를 적용하는 데 유용합니다. |
설명
Binding은 Binding.RelativeSource를 Binding 개체 요소의 특성 또는 {Binding} 태그 확장 내의 구성 요소로 설정할 수 있습니다. 이 때문에 두 개의 서로 다른 XAML 구문이 표시됩니다.
RelativeSource 는 {Binding} 태그 확장과 유사 합니다. 자체 인스턴스를 반환하고 기본적으로 생성자에 인수를 전달하는 문자열 기반 생성을 지원할 수 있는 태그 확장입니다. 이 경우 전달되는 인수는 Mode 값입니다.
자체 모드는 요소의 한 속성을 동일한 요소의 다른 속성에 바인딩하는 데 유용하며 ElementName 바인딩의 변형이지만 요소의 이름을 지정한 다음 자체 참조할 필요는 없습니다. 요소의 한 속성을 동일한 요소의 다른 속성에 바인딩하는 경우 속성은 동일한 속성 형식을 사용해야 하거나 바인딩에서 Converter를 사용하여 값을 변환해야 합니다. 예를 들어 변환 없이 Height를 Width의 원본으로 사용할 수 있지만 IsEnabled를 Visibility의 원본으로 사용하려면 변환기가 필요합니다.
예를 들어 다음과 같습니다. 이 사각형은 {Binding} 태그 확장을 사용하여 높이와 너비가 항상 같고 사각형으로 렌더링 되도록 합니다. Height만 고정 값으로 설정됩니다. 이 사각형의 경우 기본 DataContext는 null이 아니라 null입니다. 따라서 데이터 컨텍스트 원본을 개체 자체로 설정하고 다른 속성에 바인딩을 사용하도록 설정하려면 {Binding} 태그 확장 사용에서 인수를 사용합니다 RelativeSource={RelativeSource Self}
.
<Rectangle
Fill="Orange" Width="200"
Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"
/>
또 다른 용도 RelativeSource={RelativeSource Self}
는 개체의 DataContext 를 자체로 설정하는 방법입니다. 예를 들어 이 방법은 Page 클래스가 고유한 데이터 바인딩을 위해 즉시 사용 가능한 보기 모델을 이미 제공하고 있는 사용자 지정 속성을 사용하여 확장된 일부 SDK 예제에서 확인할 수 있습니다. 예는 다음과 같습니다. <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">
참고: RelativeSource의 XAML 사용량은 바인딩 식의 일부로 XAML의 Binding.RelativeSource에 대한 값을 설정하는 용도만 표시합니다. 이론적으로 값 이 RelativeSource인 속성을 설정하는 경우 다른 용도로 사용할 수 있습니다.