9

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

这个确切地解释了我想为背景做的事情并给出了一个解决方案

这个解释了如何将 tabItems 居中

我遇到的问题是它们都单独工作得很好,但是当它们结合起来时,它们就不起作用了。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>

帮助?

4

1 回答 1

14

哦,伙计,发现问题真是一场噩梦。问题在于 tabcontrol 使用的默认模板。

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>

这就是它的样子 在此处输入图像描述

于 2013-11-08T17:04:11.697 回答