템플릿 바인딩과 바인딩은 무엇입니까?


118

나는 이해할 수 없었다 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>

다른 유형의 바인딩도 설명하십시오.


이 반환 이유와
BorderThickness가

1
@Euphoric이 페이지는 해당 쿼리에 대한 첫 번째 Google 결과 인 것 같습니다. ;)
ANeves 2014

답변:


204

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 등이 없습니다. BindingTemplateBindingExtention 의 속성 참조 ).

58

사진은 천 단어의 가치가 있습니다. 이 경우 7 분 동영상입니다 : https://www.youtube.com/watch?v=z-0TZR-7xLI

편집 : 예 :

  • A Button에는 기본 ControlTemplate속성과 Height속성이 있습니다.
  • 직접 작성하여 ControlTemplatea의 속성을 재정의 합니다 Button(예 : Ellipse-looking 대신 -looking 버튼 을 만들고 싶습니다 Rectangle).
  • Ellipse새 를 만든 후 원래 Button의 속성 과 같은 크기 ControlTemplate를 원합니다.EllipseHeight
  • 사용 그래서 TemplateBinding참조를 위해 ButtonHeight그것을 이름을 지정하지 않고여기에 이미지 설명 입력

이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Bhargav Rao

32

Eren Ersönmenz는 이미 잘 설명했지만 개념을 더 잘 이해할 수 있도록 또 다른 관점을 제공하고 싶습니다.

WPF에서 모든 컨트롤은 프레젠테이션에서 다소 분리됩니다. 언제든지 컨트롤 템플릿을 변경하여 완전히 다르게 만들 수 있습니다. 버튼은 예를 들어 ControlTemplate로만 구성된 경우 예상대로 작동합니다 Rectangle. 이제 때때로 ControlTemplate컨트롤의 논리 부분의 속성을 실제로 사용하는 것이 필요합니다 . 그리고 TemplateBinding그것은 단지 ControlTemplate"시각적 프리젠 테이션을 제공하는 컨트롤의이 속성을 사용하십시오" 라고 말하는 것 입니다. 좋은 예입니다 Background그것은으로 그 의미를 가져, 모든 컨트롤의 속성, 그것은 그 자체로 의미가 없습니다 TemplateBinding에 자식 컨트롤에 ControlTemplate.

자체 바인딩은 MSDN 에 매우 잘 설명되어 있습니다. 이것은 실제로 내 벽에 바로 옆에 걸려있는 아주 멋진 치트 시트입니다. 사용 가능한 모든 다른 바인딩에 대한 좋은 개요를 제공합니다.


6

에서 TemplateBinding 태그 확장 , TemplateBinding템플릿 화 제어에 대한 몇 가지 다른 노출 속성 값을 컨트롤 템플릿의 속성 값을 연결합니다. 즉, 템플릿의 값을 바인딩하기위한 것입니다.

바인딩 은 바인딩 대상과 데이터 소스의 속성을 연결합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.