WPF标签控件:设置标签颜色?

时间:2010-01-18 14:44:26

标签: wpf colors wpf-controls tabcontrol

我的WPF应用程序中有一个TabControl,它使用WPF选项卡控件的默认颜色。换句话说,活动选项卡为白色,非活动选项卡为银色。我已经通过设置Background对象的Background属性将所有标签页的TabControl颜色更改为Beige,但它不会更改标签颜色,只会更改客户端区域。所以,我最终得到了一个活动标签,它有一个米色的客户区和一个白色标签。

我想设置标签Color以匹配客户区域,以便整个页面为米色。我该怎么办?感谢。

2 个答案:

答案 0 :(得分:5)

以下是我的某个项目中标签项样式的示例。对不起一些不相关的代码,我相信你会从中提取你需要的东西。

<Style x:Uid="Style_21" TargetType="{x:Type TabItem}">
        <Setter x:Uid="Setter_75" Property="Template">
            <Setter.Value>
                <ControlTemplate x:Uid="ControlTemplate_7" TargetType="{x:Type TabItem}">
                    <Grid x:Uid="Grid_13">
                        <Border 
                             x:Uid="Border" Name="Border"
                             Background="#F0F0F0"
                             BorderBrush="LightGray" 
                             BorderThickness="1,1,1,0" 
                             CornerRadius="4,4,0,0" 
                             Margin="0,0,2,0" SnapsToDevicePixels="True" >
                            <TextBlock x:Uid="TextBlock" FontSize="15" 
                                       HorizontalAlignment="Center" 
                                       Name="TextBlock" 
                                       Foreground="DarkGray">
                            <ContentPresenter x:Uid="ContentSite" x:Name="ContentSite"
                                               VerticalAlignment="Center"
                                               HorizontalAlignment="Center"
                                               ContentSource="Header"
                                               Margin="12,2,12,2"/>
                            </TextBlock>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger x:Uid="Trigger_14" Property="IsSelected" Value="True">
                            <Setter x:Uid="Setter_76" TargetName="Border" Property="Background" Value="White" />
                            <Setter x:Uid="Setter_77" TargetName="Border" Property="BorderBrush" Value="Gray" />
                            <Setter x:Uid="Setter_78" TargetName="TextBlock" Property="Foreground" Value="Black" />
                            <Setter x:Uid="Setter_79" TargetName="Border" Property="Margin" Value="0,0,2,-1" />
                        </Trigger>
                        <Trigger x:Uid="Trigger_15" Property="IsMouseOver" Value="True" SourceName="Border" >
                            <Setter x:Uid="Setter_80" TargetName="Border" Property="Background" Value="White" />
                            <Setter x:Uid="Setter_81" TargetName="Border" Property="BorderBrush" Value="DarkGray" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

希望它有所帮助。

答案 1 :(得分:3)

我制定了解决方案。我将把levanovd的答案选为正确答案,以表达对他的帮助。

本质上,修复是对TabItem控件模板的单行更改。从正常TabItem控件模板的副本开始,并将控件模板设置为定位TabItem类型的所有控件。找到IsSelected触发器,并将其更改为以下内容:

<Setter Property="Background" TargetName="Bd" Value="{Binding Path=Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}}"/>

BdBorder控件,用于设置TabItem标签区域的边框和背景。此标记告诉WPF将Bd Background属性绑定到相对源。在这种情况下,相对来源是托管Background的{​​{1}}的{​​{1}}属性。因此,当您设置TabControl的{​​{1}}属性时,颜色将流向TabItem中托管的所有Background控件的标签区域。

以下是我在Blend 3中创建的演示的完整标记:

TabControl