2012-02-21 67 views
1

我试图做一些事情,我会觉得这是非常简单的选择背景颜色,但谈到了将相当复杂。 我与已经在包括装配风格的一个主题一个TabControl的工作,但我想要的TabItem的背景色当TabItem的选择是不同的。虽然我可以在其他程序集中的主题上进行更改,但我宁愿将其覆盖以用于我的应用程序。erriding为主题的TabItem

这个问题似乎是设置背景颜色选择的TabItems涉及设置控制模板,特别是对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

我想过做但─问题是,我使用的主题,在所有重用他们的画笔所以即使我只在本地对每个tabitem进行更改,它最有可能改变的不仅仅是所选标签的颜色。 – dbromberg 2012-02-21 22:29:13