WPF:当tabItem居中时,更改TabControl标签后面的背景

时间:2013-11-08 16:33:17

标签: c# wpf tabcontrol

所以,我希望我的标签中的标签项水平居中。我还想更改选项卡背后的背景。我找到了这两个方面的答案:

This one explains exactly what I want to do for the background and gives a solution

This one explains how to center the tabItems

我遇到的问题是它们都是单独运作的,但是当它们结合起来时,它们就不起作用了。 tabItems中心很好,但背景颜色不是我指定的颜色。

E.g。代码:

<TabControl>
    <TabControl.Resources>
        <Style TargetType="{x:Type TabPanel}">
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="Background" Value="Red" />
        </Style>
    </TabControl.Resources>

    <TabItem Header="Test 1" />
    <TabItem Header="Test 2" />
    <TabItem Header="Test 3" />
    <TabItem Header="Test 4" />
</TabControl>

帮助?

1 个答案:

答案 0 :(得分:10)

噢,这是一个发现问题的噩梦。问题在于tabcontrol使用的默认模板。

DefaultTemplate for TabControl

TabPanel本身设置为拉伸以外的东西不会填满网格中需要的东西。这就是背景没有显示的原因。

另一个问题是ContentPanel的背景是绑定到TabControl背景的模板。所以在挖掘之后我发现我可以覆盖构成带有背景的tabcontrol的网格的样式,它只会填满网格的第一行,因为第二行背景是模板绑定的。

希望通过查看默认模板,您应该能够看到我所看到的内容。

以下是它的实际代码

<TabControl>
    <TabControl.Resources>
        <Style TargetType="{x:Type Grid}">
            <Setter Property="Background" Value="Red"/>
        </Style>
        <Style TargetType="{x:Type TabPanel}">
            <Setter Property="HorizontalAlignment" Value="Center"/>
        </Style>
    </TabControl.Resources>
    <TabItem Header="Test 1"/>
    <TabItem Header="Test 2"/>
    <TabItem Header="Test 3"/>
    <TabItem Header="Test 4"/>
</TabControl>

这就是它应该是什么样子 enter image description here