【发布时间】:2017-04-27 21:35:26
【问题描述】:
我正在开发一个 Visual Studio 2013 扩展。我在 ToolWindowPane 中使用的每个控件都使用与 Visual Studio 中当前加载的主题相同的背景,使用如下:
Background="{DynamicResource {x:Static vsfx:VsBrushes.ToolboxBackgroundKey}}"
我向其中一个用户控件添加了选项卡,并在TabControl、ItemTemplate 内部的StackPanel 和TabControl.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