Spevy
Spevy

Reputation: 1325

FocusVisualStyle Template, bind property to a parent's

I have created a FocusVisualStyle for my user control and have successfully implemented the override. My problem is I would like that to use some properties from the parent, but TemplateBinding doesn't seem to work.

A simplified version of the the Control is defined as below:

<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>

My custom FocusVisualStyle is defined as follows:

<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>

If I hard code BorderThickness in ThoughtFocusStyle it works as expected (Tab into the control), but using TemplateBinding does not. I've played around with RelativeSource but can't seem to get the syntax right (still very new to WPF).

Upvotes: 0

Views: 1246

Answers (1)

eran otzap
eran otzap

Reputation: 12533

try :

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

Upvotes: 5

Related Questions