문제

이것은 차이점 이 두 바인딩 사이 :

<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를 퀴즈 해야하는 사람들이 작성하므로 뉘앙스가 옳지 않습니다.

TemplateBindings는 제어 템플릿에 지정된 유형에 대해 컴파일 시간에 평가됩니다. 이를 통해 컴파일 된 템플릿을 훨씬 빠르게 인스턴스화 할 수 있습니다. TemplateBinding에서 이름을 변형 시키면 컴파일러에 플래그가 표시됩니다.

바인딩 마크 업은 런타임에 해결됩니다. 실행이 느리지 만 바인딩은 템플릿에서 선언 한 유형에서 보이지 않는 속성 이름을 해결합니다. 느리게, 바인딩 작업이 응용 프로그램의 CPU를 거의 갖지 않기 때문에 그 종류의 친척이 지적합니다. 고속으로 제어 템플릿을 폭파하는 경우 알 수 있습니다.

실제로는 바인딩을 두려워 할 수는 있지만 템플릿 교과를 사용하십시오.

다른 팁

템플릿 결합 - 규칙적인 바인딩을 사용하는 것보다 더 제한적입니다

  • 바인딩보다 효율적이지만 기능이 적습니다.
  • ControlTemplate의 시각적 트리 내에서만 작동합니다
  • Freezables의 속성과 함께 작동하지 않습니다
  • ControlTemplate의 트리거 내에서 작동하지 않습니다
  • 설정 속성 (장황하지 않음)에서 바로 가기를 제공합니다.

정기적인 제본 - 템플릿 결합의 한계가 없습니다

  • 부모 속성을 존중합니다
  • 명시 적으로 설정된 값을 지우기 위해 대상 값을 재설정합니다.
  • 예시:u003CEllipse Fill="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Background}"/>

한 가지 더 - TemplateBindings는 가치 변환을 허용하지 않습니다. 변환기를 통과 할 수 없으며 int를 예를 들어 String으로 자동으로 변환하지 않습니다 (바인딩의 경우 정상).

TemplateBinding은 TemplatedParent와의 바인딩을위한 속기이지만 바인딩 클래스의 모든 기능을 노출 시키지는 않습니다. 예를 들어 TemplateBinding에서 Binding.Mode를 제어 할 수 없습니다.

친척 소스 템플릿 펜트

이 모드는 주어진 ControlTemplate 속성을 ControlTemPlate에 적용되는 컨트롤의 특성에 묶을 수 있습니다. 여기서 문제를 잘 이해하려면 벨로우즈의 예가 있습니다.

<Window.Resources>
    <ControlTemplate x:Key="template">
        <Canvas>
            <Canvas.RenderTransform>
                <RotateTransform Angle="20"/>
            </Canvas.RenderTransform>
            <Ellipse Height="100" Width="150" 
                     Fill="{Binding 
                RelativeSource={RelativeSource TemplatedParent},
                Path=Background}">

            </Ellipse>
            <ContentPresenter Margin="35" 
                      Content="{Binding RelativeSource={RelativeSource  
                      TemplatedParent},Path=Content}"/>
        </Canvas>
    </ControlTemplate>
</Window.Resources>

<Canvas Name="Parent0">
    <Button   Margin="50" 
              Template="{StaticResource template}" Height="0" 
              Canvas.Left="0" Canvas.Top="0" Width="0">
        <TextBlock FontSize="22">Click me</TextBlock>
    </Button>
</Canvas>

주어진 컨트롤의 속성을 제어 템플릿에 적용하려면 템플릿 배치 모드를 사용할 수 있습니다. 이 마크 업 확장과 유사한 것이 있는데,이 마크 업 확장은 첫 번째 템플릿 바인딩 인 TemplateBinding이지만, 템플릿 결합은 첫 번째 런 시간 직후에 평가되는 템플릿 배치의 대비로 컴파일 시간에 평가됩니다. 벨로우 그림에서 언급 할 수 있듯이 배경과 내용은 버튼 내에서 제어 템플릿으로 적용됩니다.

TemplateBinding은 냉동 가능한 유형 (브러시 객체 포함)을 지원하지 않는다고 생각했습니다. 문제를 해결하기 위해. 하나는 템플릿 배달원을 사용할 수 있습니다

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top