Wpf 为主题选项卡项指定所选背景色时出错

Wpf 为主题选项卡项指定所选背景色时出错,wpf,styles,controltemplate,overriding,tabitem,Wpf,Styles,Controltemplate,Overriding,Tabitem,我正在尝试做一些我认为很简单的事情,但结果却很复杂。 我正在使用一个TabControl,它已经由包含的程序集中的主题设置了样式,但是我希望选择TabItem时TabItem的背景色不同。虽然我可以在另一个程序集中更改这个主题,但我宁愿在我的应用程序中重写它 问题似乎在于,为选定的TabItems设置背景色涉及设置控件模板,特别是在IsSelected属性上设置控件模板触发器。我找不到一种简单的方法,在不完全定义控件模板的情况下,只覆盖一个触发器(导致大量不必要的复制/粘贴代码)。这就是我现在所

我正在尝试做一些我认为很简单的事情,但结果却很复杂。 我正在使用一个TabControl,它已经由包含的程序集中的主题设置了样式,但是我希望选择TabItem时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>

我认为更改颜色的最简单方法是覆盖资源:

      <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>

表一
表二

我考虑过这样做-问题是我使用的主题会在所有地方重复使用它们的画笔,因此即使我只在每个选项卡项上局部更改画笔,也很可能更改的不仅仅是所选选项卡的颜色。