2012-10-06 4 views
0

내 사용자 정의 컨트롤에 대한 FocusVisualStyle을 만들고 오버라이드를 성공적으로 구현했습니다. 내 문제는 부모로부터 일부 속성을 사용하고 싶습니다,하지만 TemplateBinding 작동하지 않는 것 같습니다.FocusVisualStyle 부모에게 속성을 바인딩하는 템플릿

하여 제어의 단순화 된 버전은 다음과 같이 정의된다

<Style TargetType="{x:Type local:Thought}"> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource ThoughtFocusStyle}" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:Thought}" > 
     <Border BorderThickness="{TemplateBinding BorderThickness}" 
       BorderBrush="{StaticResource ThoughtBorderNormalBrush}"> 
      <!-- other controls --> 
     </Border> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

내 사용자 정의 FocusVisualStyle이 정의를 다음과 같이

<Style x:Key="ThoughtFocusStyle" TargetType="{x:Type Control}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Control}"> 
     <Border BorderThickness="{TemplateBinding BorderThickness}" 
       BorderBrush="{StaticResource ThoughtBorderFocusBrush}"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

예상대로 ThoughtFocusStyle에서 나는 하드 코드의 경계선이 작동하는 경우 (컨트롤에 Tab)하지만 TemplateBinding을 사용하면 않습니다. 나는 RelativeSource를 가지고 놀았지만 구문을 올바로 보일 수는 없다. (여전히 WPF에서는 매우 새로운 것이다.)

답변

4

시도 :

<Border BorderThickness="{Binding 
          RelativeSource={RelativeSource Mode=FindAncestor,   
          AncestorType=Control}, 
          Path=BorderThickness}"> 
+0

근무, 올바른 구문 주셔서 감사합니다. – Spevy

+0

TemplateBinding을 사용하면 TemplateBinding을 사용하여 템플릿 바인딩과 정확히 일치하는 템플릿을 만들 수 있습니다 ... 어떤 상황에서 작동하지 않는지 기억하지 못합니다. –

+0

시도해보십시오. "{Binding RelativeSource = {{ RelativeSource 모드 = TemplatedParent}, 경로 = BorderThickness} " –

관련 문제