首页 > 解决方案 > C# WPF:如何减少选项卡之间的线条粗细

问题描述

我想要一个与我正在为其创建插件的程序的样式相匹配的大部分未修改的选项卡控件。我的问题是,默认情况下,tabcontrol 选项卡似乎有一个位于选项卡范围内的边框,这会在非活动选项卡相遇的地方创建一个双边框。我希望这个边框是一条线,与选项卡顶部的粗细相同(我使用的是顶部右对齐)。

不幸的是,我在谷歌和这里用来描述这一点的词语让我很难弄清楚我需要改变什么属性/属性。我曾尝试Margin="-1,0,0,0"在除第一个选项卡之外的所有选项卡上使用将它们“挤压”在一起,但这无意中迫使除第一个选项卡之外的所有选项卡在活动/选择/按下时不放大。

这是选项卡控件,基本上没有修改,两个非活动选项卡之间的双边框似乎是默认外观:

在此处输入图像描述

这是Margin设置为上述值以及两个非活动选项卡之间边框的所需外观的构建:

在此处输入图像描述

这是使用上述Margin设置导致的问题:

在此处输入图像描述

对此的任何帮助将不胜感激!这可能是一个非常简单的修复,但我对选项卡控件不太熟悉,并且查看属性并没有给我正确的洞察力来自己解决它。

标签: c#wpfxamltabstabcontrol

解决方案


改变 TabItem 的 Header 的 BorderThickness 的唯一方法是编辑它的 ControlTemplate。在设计中,右键单击标题并选择编辑模板 > 编辑副本。IsSelected您必须编辑 MultiDataTrigger,它在为 false 且TapStripPlacement为 Top时更改 TabItem 的 mainBorder 的 BorderThickness 。找到此代码:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/>
        <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>
    </MultiDataTrigger.Conditions>
    <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/>
    <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/>
</MultiDataTrigger>

将 mainBorder 的 BorderThickness 的值更改为“0,1,1,0”。然后,您可以将样式应用于除第一个之外的每个 TabItem。


推荐阅读