WPF:当TabItem居中时更改TabControl后面的选项卡背景

9
所以,我希望选项卡中的选项居中水平对齐。我还想更改选项卡背景。我找到了一个关于这两个问题的答案:这篇文章详细解释了我想做的背景变化,并给出了解决方案这篇文章解释了如何居中显示选项卡
我的问题是,它们分别工作得很好,但是当组合在一起时就不起作用了。选项卡项目已经很好地居中了,但背景颜色并非我指定的颜色。
例如,代码:
<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>

Help?

1个回答

14

哦,天哪,找到问题真是一场噩梦。问题出在TabControl使用的默认模板上。

TabControl的默认模板

当TabPanel设置为除stretch以外的其他选项时,在网格中它不会填充更多的空间。这就是为什么背景没有显示出来的原因。

另一个问题是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>

以下是展示效果 在这里输入图片描述


"当TabPanel本身被设置为除stretch以外的其他选项时,在网格中它不会填充更多的空间。" 这就是我想到的,最终我决定将选项卡控件放在一个网格中,并给该网格一个背景色,这与你的解决方案类似,只是我认为你的看起来更好,所以我会改成那种方式。谢谢!" - PhilBel
您还可以通过在样式内添加更多的setter来从TabPanel中访问它。将网格的垂直和水平对齐方式设置为Stretch,例如:Property="Grid.HorizontalAlignment" Value="Stretch"Property="Grid.VertcialAlignment" Value="Stretch",然后设置您的背景颜色,例如:Property="Grid.Background" Value="<your background color>" - Kidiskidvogingogin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接