是否有一种简单的方法可以在WPF TabControl中设置所有非活动选项卡的背景画笔?我想在TabControl上模拟VS 2010的外观 - 控件的非活动选项卡的背景颜色应该与TabControl所在的窗口的背景颜色相匹配,这样您只能看到选项卡的文本,而不是标签本身。
我知道需要一个ControlTemplate才能做到这一点;我想弄清楚要放在控件模板中的内容。换句话说,如何指定特定画笔应该应用于所有非活动标签?谢谢你的帮助。
答案 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中完成。