【发布时间】:2017-01-06 18:27:08
【问题描述】:
我正在编写一个 WPF 应用程序并尝试设置 TabItem 标题的样式,以便仅在选择时显示带有背景颜色变化的边框。问题是当我添加该样式时,它会弄乱 TabItem 中我的 TextBlock 项目的样式。我不是 WPF / XAML 专家。下面是我在 TabControl 中使用的样式。我也在使用 MahApps 地铁样式。任何想法将不胜感激。
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Border Name="Border" BorderThickness="1,1,1,0" BorderBrush="Gainsboro" CornerRadius="4,4,0,0" Margin="2,0">
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
Margin="10,2"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="{DynamicResource AccentColorBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
【问题讨论】:
-
您说“它弄乱了 TabItem 中我的 TextBlock 项目的样式”。你可以说得更详细点吗?我无法使用您提供的 XAML 重现任何 TextBlock 显示问题。
-
有了适当的样式,它使我所有的文本块项目都有一个黑色的前景。当我使用白色背景时效果很好,但是当我将其切换为黑色背景时,您看不到文本块项目,因为保持黑色而不是像我的标签项目那样变为白色。如果他们是 Style 中仅针对 TabItem.Header 元素而不是整个 TabItem 的一种方式,我认为这可以解决我的问题,但根据我对 XAML/WPF 的有限知识,我认为你不能这样做。
-
XAML 中没有任何东西可以改变任何东西的前景色。您是否尝试将
BasedOn设置为Style?<Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}"> -
你摇滚!这解决了我的问题。我的文本块元素显示正确。我不是 XAML / WPF 专家,我可能从未找到该解决方案。再次感谢!!!