【发布时间】:2014-03-05 10:24:06
【问题描述】:
我正在尝试设置 WPF TabControl 的样式。我基本上想让选项卡控件具有透明背景,带有白色边框和文本。我希望所选选项卡具有白色背景和透明文本(或任何彩色文本!)。本质上是一个 2 色标签。
但是,我无法覆盖选定的选项卡外观 - 这显示为白色。我的子文本框采用 TabItem 字体的样式。请注意,在屏幕截图中,我的标签有自己的样式集,所以不要使用 TabItem 字体。
我有以下 XAML 来执行此操作。理想情况下,我想创建样式以便在整个应用程序中重复使用。
资源字典
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008">
<Style x:Key="Tabs" TargetType="TabControl">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="White"/>
</Style>
<Style x:Key="TabItemStyle" TargetType="TabItem">
<Setter Property="Foreground" Value="White" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="FontSize" Value="16" />
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=TabItem}}" Value="True">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="White"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=TabItem}}" Value="False">
<Setter Property="Foreground" Value="LightGray"/>
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
然后是 XAML 标记
<TabControl Style="{StaticResource Tabs}">
<TabItem Header="General" Style="{StaticResource TabItemStyle}">...</TabItem>
<TabItem Header="Details" Style="{StaticResource TabItemStyle}">...</TabItem>
<TabItem Header="Info" Style="{StaticResource TabItemStyle}">...</TabItem>
<TabItem Header="More Stuff..." Style="{StaticResource TabItemStyle}">...</TabItem>
</TabControl>
如何设置标签的样式并防止子级调整大小?
【问题讨论】:
-
为什么不按照您想要的方式设置模板并使其成为您自己的模板,而不仅仅是针对属性和触发器?也可以,因为无论如何您都想更改其中的大部分内容。
标签: wpf xaml tabcontrol