[wpf] WPF TemplateBinding 대 상대 소스 TemplatedParent

이 두 바인딩 의 차이점 은 무엇입니까?

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{TemplateBinding Property=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>

?



답변

TemplateBinding은 완전히 다릅니다. MSDN 문서는 종종 소프트웨어 기능에 대한 단음절 SDE를 퀴즈로 풀어야하는 사람들이 작성하므로 뉘앙스가 옳지 않습니다.

템플릿 바인딩은 컨트롤 템플릿에 지정된 형식에 대해 컴파일 타임에 평가됩니다. 이렇게하면 컴파일 된 템플릿을 훨씬 빠르게 인스턴스화 할 수 있습니다. 템플릿 바인딩에서 이름을 바꾸면 컴파일러에서 플래그를 지정할 수 있습니다.

바인딩 마크 업은 런타임에 해결됩니다. 실행 속도는 느리지 만 바인딩은 템플릿에서 선언 한 유형에 표시되지 않는 속성 이름을 확인합니다. 더 느리게 말하면 바인딩 작업이 응용 프로그램의 CPU를 거의 사용하지 않기 때문에 그 종류의 상대 항목을 지적합니다. 컨트롤 템플릿을 고속으로 날려 버렸다면 알 수 있습니다.

실제로 바인딩을 두려워 할 수는 있지만 TemplateBinding을 사용하십시오.


답변

TemplateBinding- 일반 바인딩을 사용하는 것보다 더 제한적

  • 바인딩보다 효율적이지만 기능이 적습니다.
  • ControlTemplate의 비주얼 트리에서만 작동
  • Freezables의 속성으로는 작동하지 않습니다
  • ControlTemplate의 트리거 내에서 작동하지 않습니다
  • {TemplateBinding targetProperty}와 같이 속성을 설정하는 방법에 대한 바로 가기를 제공합니다 (예 : 자세한 설명 아님).

일반 바인딩-TemplateBinding의 제한이 없습니다.

  • 부모 속성 존중
  • 명시 적으로 설정된 값을 지우려면 대상 값을 재설정합니다
  • 예 : <Ellipse Fill = “{바인딩 RelativeSource = {RelativeSource TemplatedParent}, Path = Background}”/>

답변

한 가지 더 – TemplateBindings는 값 변환을 허용하지 않습니다. 그들은 당신이 변환기를 전달할 수 없으며 int를 문자열로 자동 변환하지 않습니다 (예 : 바인딩의 경우 정상).


답변

TemplateBinding은 TemplatedParent를 사용한 Binding의 약자이지만 Binding 클래스의 모든 기능을 노출하지는 않습니다. 예를 들어 TemplateBinding에서 Binding.Mode를 제어 할 수 없습니다.


답변

TemplateBinding이 Freezable 형식 (브러시 개체 포함)을 지원하지 않는다고 생각했습니다. 문제를 해결하기 위해. 하나는 TemplatedParent를 사용할 수 있습니다


답변

그것들은 비슷한 방식으로 사용되지만 몇 가지 차이점이 있습니다. 다음은 TemplateBinding 설명서에 대한 링크입니다.
http://msdn.microsoft.com/en-us/library/ms742882.aspx


답변