2012-02-21 7 views
1

私はかなりシンプルだと思うことをしようとしていますが、かなり複雑になっています。 私はすでに付属のアセンブリのテーマによってスタイリングされているTabControlを使用していますが、TabItemが異なるように選択されている場合、TabItemの背景色が必要です。私はこれを他のアセンブリのテーマで変えることができますが、私はむしろアプリケーションのためにオーバーライドしたいと思います。テーマ付きタブアイテムの選択された背景色を整形する

問題は、選択したTabItemの背景色を設定するには、コントロールテンプレートを設定すること、特にIsSelectedプロパティでコントロールテンプレートをトリガーすることが必要なようです。私はそのようなコントロールテンプレートを完全に定義することなくそのトリガーをオーバーライドするだけの簡単な方法は見つけられません(不要なコピー/貼り付けコードがたくさんあります)。ここに私が今持っているのは、私が気にしている部分だけを対象にこれをカットする方法はありますか? ControlTemplatesは継承可能ではないようです。あなたが提供できるお手伝いをありがとう。

<Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <Grid> 
        <Border Name="Border" 
         Margin="0,0,-4,0" 
         Background="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDKey}}" 
         BorderBrush="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDKey}}" 
         BorderThickness="1,1,1,1" 
         CornerRadius="3,3,0,0"> 
         <ContentPresenter x:Name="ContentSite" 
          VerticalAlignment="Center" 
          HorizontalAlignment="Center" 
          ContentSource="Header" 
          Margin="12,2,12,2" 
          RecognizesAccessKey="True" /> 
        </Border> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Panel.ZIndex" Value="100" /> 
         <Setter TargetName="Border" 
          Property="Background" 
          Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushLightKey}}" /> 
         <Setter TargetName="Border" 
          Property="BorderBrush" 
          Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushLightKey}}" /> 
         <Setter Property="Foreground" 
          Value="{DynamicResource {x:Static themes:HarmonyBrushes.TextBrushLightKey}}" /> 
         <Setter TargetName="Border" 
          Property="BorderThickness" 
          Value="1,1,1,0" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter TargetName="Border" 
          Property="Background" 
          Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDarkKey}}" /> 
         <Setter TargetName="Border" 
          Property="BorderBrush" 
          Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDarkKey}}" /> 
         <Setter Property="Foreground" 
          Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushKey}}" /> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Foreground" 
          Value="{DynamicResource {x:Static themes:HarmonyBrushes.TextBrushLightKey}}" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

答えて

0

私は色を変更する最も簡単な方法は、リソースを上書きすることであると思う:

 <Grid> 
     <Grid.Resources> 
      <SolidColorBrush x:Key="{x:Static themes:HarmonyBrushes.BrushLightKey}" Color="Green" /> 
     </Grid.Resources> 
     <TabControl> 
      <TabItem>Tab One</TabItem> 
      <TabItem>Tab Two</TabItem> 
     </TabControl> 
     </Grid> 
+0

私は問題that-ことについて考えた私が使用しているテーマは、すべての上に自分のブラシを再利用するということです私が各タブアイテムにローカルに変更するだけであっても、選択されたタブの色以上に変更される可能性が最も高いです。 – dbromberg

関連する問題