ユーザー コントロールの FocusVisualStyle を作成し、オーバーライドを正常に実装しました。私の問題は、親からいくつかのプロパティを使用したいのですが、TemplateBinding が機能していないようです。
コントロールの簡略化されたバージョンは、次のように定義されます。
<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 で BorderThickness をハードコーディングすると、期待どおりに動作します (コントロールに Tab キーを押します) が、TemplateBinding を使用すると動作しません。私は RelativeSource をいじってみましたが、正しい構文を取得できないようです (WPF ではまだ非常に新しい)。