带 DynamicResource 的选项卡背景在 Visual Studio 2013 扩展中不起作用

Tab background with DynamicResource not working in Visual Studio 2013 extension

我正在开发 Visual Studio 2013 扩展。我在 ToolWindowPane 中使用的每个控件都使用与 Visual Studio 中当前加载的主题相同的背景,使用:

Background="{DynamicResource {x:Static vsfx:VsBrushes.ToolboxBackgroundKey}}"

我向其中一个用户控件添加了选项卡,并在 TabControlStackPanelItemTemplate 中以及 [=17] 中的样式中指定了背景=],如下:

<TabControl
    Background="{DynamicResource {x:Static vsfx:VsBrushes.ToolboxBackgroundKey}}"
    >

<TabControl.Resources>
    <Style TargetType="{x:Type TabPanel}">
        <Setter Property="Background" Value="{DynamicResource {x:Static vsfx:VsBrushes.ToolboxBackgroundKey}}" />
        </Style>
</TabControl.Resources>

<TabControl.ItemTemplate>
    <DataTemplate >
        <StackPanel Orientation="Horizontal"
                    Background="{DynamicResource {x:Static vsfx:VsBrushes.ToolboxBackgroundKey}}">

但是 header 仍然是这样的:

有没有办法将 Visual Studio 的 Tab header 样式应用到我的 TabControl,使其看起来与 Visual Studio 选项卡相同?

是否至少有一种方法可以删除 header 中样式部分周围的 "white" 背景?

谢谢

编辑:

Paulo 为我指出了正确的方向:我必须重新定义 TabItem 的模板。我遵循了这个 post 的答案:How to make WPF TabItem Headers' Background transparent?。我在选择时删除了圆角半径和边距,并且还使用了 VsBrushes 作为颜色:

<TabControl.Resources>
    <Style TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border
                            Name="TabItemBorder"
                            Margin="0,0,-4,0"
                            Background="{DynamicResource {x:Static vsfx:VsBrushes.FileTabInactiveDocumentBorderBackgroundKey}}"
                            BorderThickness="1,1,1,1"
                            >
                            <ContentPresenter
                                x:Name="TabItemContentSite"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"
                                ContentSource="Header"
                                Margin="5,2,5,2"
                                RecognizesAccessKey="True"
                                />
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Panel.ZIndex" Value="100" />
                            <Setter TargetName="Border" Property="Background" Value="{DynamicResource {x:Static vsfx:VsBrushes.FileTabSelectedBackgroundKey}}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
       </Setter>
   </Style>

结果如下所示:

我认为您需要设置 TabItem 的样式。如果只使用ItemTemplate,系统只会替换一小部分默认样式。

使用新样式后,您可以更好地控制显示的内容。

看来,控制权不能有有效的 VS 主题。

保罗·阿博伊姆·平托