带 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}}"
我向其中一个用户控件添加了选项卡,并在 TabControl
、StackPanel
和 ItemTemplate
中以及 [=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 主题。
保罗·阿博伊姆·平托
我正在开发 Visual Studio 2013 扩展。我在 ToolWindowPane 中使用的每个控件都使用与 Visual Studio 中当前加载的主题相同的背景,使用:
Background="{DynamicResource {x:Static vsfx:VsBrushes.ToolboxBackgroundKey}}"
我向其中一个用户控件添加了选项卡,并在 TabControl
、StackPanel
和 ItemTemplate
中以及 [=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 主题。
保罗·阿博伊姆·平托