Wpf 为主题选项卡项指定所选背景色时出错
我正在尝试做一些我认为很简单的事情,但结果却很复杂。 我正在使用一个TabControl,它已经由包含的程序集中的主题设置了样式,但是我希望选择TabItem时TabItem的背景色不同。虽然我可以在另一个程序集中更改这个主题,但我宁愿在我的应用程序中重写它 问题似乎在于,为选定的TabItems设置背景色涉及设置控件模板,特别是在IsSelected属性上设置控件模板触发器。我找不到一种简单的方法,在不完全定义控件模板的情况下,只覆盖一个触发器(导致大量不必要的复制/粘贴代码)。这就是我现在所拥有的——有没有一种方法可以将这一点降低到只针对我关心的部分?ControlTemplates似乎不是可继承的。谢谢你能提供的任何帮助Wpf 为主题选项卡项指定所选背景色时出错,wpf,styles,controltemplate,overriding,tabitem,Wpf,Styles,Controltemplate,Overriding,Tabitem,我正在尝试做一些我认为很简单的事情,但结果却很复杂。 我正在使用一个TabControl,它已经由包含的程序集中的主题设置了样式,但是我希望选择TabItem时TabItem的背景色不同。虽然我可以在另一个程序集中更改这个主题,但我宁愿在我的应用程序中重写它 问题似乎在于,为选定的TabItems设置背景色涉及设置控件模板,特别是在IsSelected属性上设置控件模板触发器。我找不到一种简单的方法,在不完全定义控件模板的情况下,只覆盖一个触发器(导致大量不必要的复制/粘贴代码)。这就是我现在所
<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>
表一
表二
我考虑过这样做-问题是我使用的主题会在所有地方重复使用它们的画笔,因此即使我只在每个选项卡项上局部更改画笔,也很可能更改的不仅仅是所选选项卡的颜色。