나는 이해할 수 없었다 BorderThickness="{TemplateBinding BorderThickness}
. 여기에 코드 :
<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
<Border Padding="{TemplateBinding Padding}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
다른 유형의 바인딩도 설명하십시오.
답변
TemplateBinding은 템플릿 정의 내의 요소 속성에 바인딩하는 데 사용됩니다. 귀하의 예에서는 다음과 같이 작성할 수 있습니다.
<Border Padding="{Binding Padding}" ...>
테두리의 padding 속성을 padding 속성에 바인딩하는 것을 의미합니다 . “이 템플릿이 사용되는 컨트롤의 패딩 속성”이라고 말하고 싶습니다. 현재 컨트롤의 x : Name을 모르기 때문에 이름을 지정할 수 없습니다 (그렇다고해도 이름 범위가 다르기 때문에 작동하지 않습니다). 그러나 상대 소스를 정의하여이를 수행 할 수 있습니다.
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
또는 위의 단축키 (*) 인 TemplateBinding을 사용하십시오.
<Border Padding="{TemplateBinding Padding}" ...>
(*) 이러한 템플릿 시나리오에서 덜 장황한 것 외에도 TemplateBinding은 일반 바인딩과 비교하여 몇 가지 차이점이 있습니다.
- 컴파일 타임에 평가됩니다. 예를 들어 Padding 속성이 존재하지 않으면 컴파일 오류가 발생합니다. 그러나 TemplatedParent와 함께 바인딩을 사용하는 경우 런타임에만 오류가 표시됩니다.
- 항상 단방향 바인딩입니다.
- 원본 및 대상 속성이 모두 종속성 속성이어야합니다 .
- 기능이 훨씬 적습니다 (StringFormat, Delay, IsAsync 등이 없습니다. Binding 과 TemplateBindingExtention 의 속성 참조 ).
답변
답변
Eren Ersönmenz는 이미 잘 설명했지만 개념을 더 잘 이해할 수 있도록 또 다른 관점을 제공하고 싶습니다.
WPF에서 모든 컨트롤은 프레젠테이션에서 다소 분리됩니다. 언제든지 컨트롤 템플릿을 변경하여 완전히 다르게 만들 수 있습니다. 버튼은 예를 들어 ControlTemplate
로만 구성된 경우 예상대로 작동합니다 Rectangle
. 이제 때때로 ControlTemplate
컨트롤의 논리 부분의 속성을 실제로 사용하는 것이 필요합니다 . 그리고 TemplateBinding
그것은 단지 ControlTemplate
“시각적 프리젠 테이션을 제공하는 컨트롤의이 속성을 사용하십시오” 라고 말하는 것 입니다. 좋은 예입니다 Background
그것은으로 그 의미를 가져, 모든 컨트롤의 속성, 그것은 그 자체로 의미가 없습니다 TemplateBinding
에 자식 컨트롤에 ControlTemplate
.
자체 바인딩은 MSDN 에 매우 잘 설명되어 있습니다. 이것은 실제로 내 벽에 바로 옆에 걸려있는 아주 멋진 치트 시트입니다. 사용 가능한 모든 다른 바인딩에 대한 좋은 개요를 제공합니다.
답변
에서 TemplateBinding 태그 확장 , TemplateBinding
템플릿 화 제어에 대한 몇 가지 다른 노출 속성 값을 컨트롤 템플릿의 속성 값을 연결합니다. 즉, 템플릿의 값을 바인딩하기위한 것입니다.
바인딩 은 바인딩 대상과 데이터 소스의 속성을 연결합니다.