itsource

WPF 템플릿 바인딩과 상대 소스 템플릿화된 상위 항목

mycopycode 2023. 4. 27. 22:22
반응형

WPF 템플릿 바인딩과 상대 소스 템플릿화된 상위 항목

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

<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를 거의 차지하지 않기 때문에 상대적이라는 점을 지적하겠습니다.제어 템플릿을 고속으로 블라스팅하는 경우 이를 알아차릴 수 있습니다.

템플릿 바인딩은 가능하지만 바인딩을 두려워하지 않을 때 실제로 사용합니다.

템플릿 바인딩 - 일반 바인딩을 사용하는 것보다 더 제한적입니다.

  • 바인딩보다 효율적이지만 기능이 적습니다.
  • 컨트롤 템플릿의 시각적 트리 내에서만 작동합니다.
  • Freezables의 속성에서 작동하지 않음
  • 컨트롤 템플릿의 트리거 내에서 작동하지 않음
  • 속성을 설정하는 바로 가기(자세한 설정이 아님)를 제공합니다(예: {TemplateBinding targetProperty}).

일반 바인딩 - 템플릿 바인딩의 제한을 초과하지 않습니다.

  • 상위 속성 존중
  • 목표값을 재설정하여 명시적으로 설정된 값을 지웁니다.
  • 예: <타원 채우기="{Binding RelativeSource={RelativeSourceTemplatedParent},Path=Background}"/>

한 가지 더, 템플릿 바인딩은 값 변환을 허용하지 않습니다.변환기를 통과할 수 없고 자동으로 문자열로 변환되지 않습니다(예: 바인딩의 경우 일반적).

TemplateBinding은 Binding with TemplateParent의 약자이지만 Binding 클래스의 모든 기능을 표시하지는 않습니다. 예를 들어 Binding을 제어할 수 없습니다.템플릿 바인딩의 모드입니다.

TemplateBinding은 브러시 개체를 포함하는 Freezable 유형을 지원하지 않는 것으로 생각했습니다.문제를 해결하기 위해서입니다.TemplatedParent를 사용할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/1131222/wpf-templatebinding-vs-relativesource-templatedparent

반응형