【问题标题】:Tab background with DynamicResource not working in Visual Studio 2013 extension带有 DynamicResource 的选项卡背景在 Visual Studio 2013 扩展中不起作用
【发布时间】:2017-04-27 21:35:26
【问题描述】:

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

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

我向其中一个用户控件添加了选项卡,并在TabControlItemTemplate 内部的StackPanelTabControl.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}}">

但标题仍然是这样的:

有没有办法将 Visual Studio 中的 Tab 标题样式应用到我的 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>

结果如下:

【问题讨论】:

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


    【解决方案1】:

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

    使用新样式,您将可以更好地控制所展示的内容。

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

    保罗·阿博伊姆·平托

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多