错误选择主题tabitem的背景颜色

时间:2012-02-21 18:24:21

标签: wpf styles controltemplate override tabitem

我正在尝试做一些我认为非常简单的事情,但结果却相当复杂。 我正在使用已经由包含的程序集中的主题设置样式的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>

1 个答案:

答案 0 :(得分: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>