2011-06-17 4 views
1

TabItemヘッダーのカスタムスタイルを作成しようとしています。私はそれを偶然に働かせました。x:KeyがTabItemスタイルを適用しないのはなぜですか

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="test"> 

をが、これは何が起こっている

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3"> 

に動作します:

これは失敗しますか?

答えて

1

を設定する必要があります定義した2番目のスタイルは「暗黙の」スタイルです。したがって、ビジュアル/論理ツリーの下のすべてのTabItemコントロール、またはアプリケーションリソースに定義されているすべてのTabItemコントロールに適用されます。だから、キーは、それが適用対象となるオブジェクトのタイプです

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="{x:Type TabItem}"> 

あなたの第二のスタイルは同等です。

TabItemにスタイルが明示的に定義されている場合(前述のように)、暗黙的なスタイルは使用されません。また、2つの暗黙のスタイルが定義されている場合、最も近いものが勝ちます。したがって、ここに:

<Window> 
    <Window.Resources> 
     <Style TargetType="{x:Type TabItem}"> 
      <Setter Property="Background" Value="Red" /> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <Grid.Resources> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="Background" Value="Blue" /> 
      </Style> 
     </Grid.Resources> 
     ... 
     <TabItem ... /> 
     ... 
    </Grid> 
</Window> 

青いスタイルは赤いスタイルよりも優先されます。

最後に、通常、あなたのスタイルにx:Nameを含める必要はありません。

1

このスタイルをキーなしでリソースディクショナリに追加すると、スタイルはデフォルトでリソースディクショナリの有効範囲内にあるすべてのTabItemに適用されます。

<TabItem Style="{StaticResource test}" /> 

:あなたのスタイルにキーを追加する場合は、手動で明示的にそうようにそれを使用する必要がありますので、あなたが定義した最初のスタイルは、「明示的な」スタイルですスタイル

関連する問題