设置WPF TabControl非活动选项卡的背景颜色

时间:2010-03-17 14:12:19

标签: wpf wpf-controls

是否有一种简单的方法可以在WPF TabControl中设置所有非活动选项卡的背景画笔?我想在TabControl上模拟VS 2010的外观 - 控件的非活动选项卡的背景颜色应该与TabControl所在的窗口的背景颜色相匹配,这样您只能看到选项卡的文本,而不是标签本身。

我知道需要一个ControlTemplate才能做到这一点;我想弄清楚要放在控件模板中的内容。换句话说,如何指定特定画笔应该应用于所有非活动标签?谢谢你的帮助。

2 个答案:

答案 0 :(得分:6)

以下是解决方案:正如斯蒂芬所说,在控件模板中添加一个触发器。它实际上是一个属性触发器,只需要设置为非活动状态。所以我们设置 IsSelected = false 的触发器。我们将Bd的边框(TabItem的默认控件模板中的TabItem)定为目标,并将其Background设置为我们想要的颜色(我使用{{1} }匹配放置选项卡的网格)。然后我们将RelativeSource FindAncestor的{​​{1}}设置为0,我们就完成了:

Bd

我将触发器放在默认模板中,就在 IsSelected = true 触发器的正下方。

请注意,触发器是硬编码的,以搜索BorderThickness祖先作为非活动标签背景颜色(<Trigger Property="IsSelected" Value="false"> <Setter Property="Background" TargetName="Bd" Value="{Binding Path=Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}"/> <Setter Property="BorderThickness" TargetName="Bd" Value="0" /> </Trigger> )的来源。那是因为我在我用作布局根的Grid中设置了我的视图背景。如果您使用其他布局根控件,或者在其他位置(例如AncestorType={x:Type Grid}标记中)设置视图背景颜色,则需要更改Grid

顺便说一句,您还可以使用 IsSelected = true 触发器将活动标签页眉的AncestorType从白色更改为匹配<Window>背景颜色:

Background

对于喜欢此视觉表示的人,这里是完整的控件模板。它将自动应用于其范围内的任何TabControl。只需将此标记添加到XAML窗口的部分(或从<Trigger Property="IsSelected" Value="true"> <Setter Property="Panel.ZIndex" Value="1"/> <Setter Property="Background" TargetName="Bd" Value="{Binding Path=Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}}"/> </Trigger> 导入),您的TabControl将获得VS 2010外观。请记住更改ResourceDictionary proeprty,以便模板找到正确的背景颜色。

TabControl

答案 1 :(得分:1)

是。定义画笔,然后在标签的样式中,为其活动状态设置一个触发器,当它为ACTIVE时将其设置为一个画笔,当触发器触发因为它处于非活动状态时将其设置为另一个画笔。

这可以完全在XAML中完成。