DynamicResource的标签背景在Visual Studio 2013扩展程序中不起作用

时间:2017-04-26 07:00:19

标签: wpf xaml visual-studio-2013 tabcontrol dynamicresource

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

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

我向其中一个用户控件添加了标签,我在TabControlStackPanel内的ItemTemplateTabControl.Resources中的样式中指定了背景,如下:

<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}}">

但标题仍然如下:

Tabs with a background color not fitting the whole header space

有没有办法将Tab标题样式从Visual Studio应用到我的TabControl,所以它看起来与Visual Studio标签相同?

是否至少有一种方法可以删除标题中样式部分的“白色”背景?

由于

编辑:

Paulo指出我正确的方向:我必须重新定义TabItem的模板。我按照这篇文章的回答: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>

结果如下:

Tabs that look almost like the visual studio 2013 ones

1 个答案:

答案 0 :(得分:1)

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

使用新风格,您可以更好地控制自己所展示的内容。

看起来,控制控件不能有一个有效的VS主题。

Paulo Aboim Pinto