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

Phi*_*Bel 8 c# wpf tabcontrol

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

这个解释了我想要为背景做什么,并给出了解决方案

这个解释了如何使tabItem居中

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

例如代码:

<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>
Run Code Online (Sandbox Code Playgroud)

救命?

mho*_*ard 10

噢,发现问题的噩梦真是太糟糕了.问题在于tabcontrol使用的默认模板.

TabControl的DefaultTemplate

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>
Run Code Online (Sandbox Code Playgroud)

这就是它应该是什么样子 在此输入图像描述