0

ユーザー コントロールの 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 ではまだ非常に新しい)。

4

1 に答える 1

5

試す :

  <Border BorderThickness="{Binding 
                           RelativeSource={RelativeSource Mode=FindAncestor,         
                           AncestorType=Control},
                           Path=BorderThickness}">
于 2012-10-06T13:43:16.557 に答える