【发布时间】:2016-10-30 23:10:52
【问题描述】:
在我的 WPF 应用程序中,我有一个 TabControl,我将其绑定到我创建的样式:
在我看来:
<TabControl Grid.Row="6" Style="{DynamicResource SideBarTabControl}">
在单独的资源字典上:
<Style x:Key="SideBarTabControl" TargetType="{x:Type TabControl}" BasedOn="{StaticResource {x:Type TabControl}}" >
<Setter Property="FontSize" Value="{DynamicResource TitleFontSize}"/>
</Style>
到目前为止一切顺利,一切正常。问题是现在这个 TabControl 的所有子项,例如 TabItem 中的 ListView,也获得了与 TabControl 相同的 FontSize,而不是默认值。
我认为通过指定 TargetType="{x:Type TabControl}" 我会阻止将样式应用于不同类型的子项。我正在寻找的是真正阻止它影响一切,但明确继承该样式的组件。那么如何做到这一点呢?我想我错过了一些简单的东西......
如果我在我的 ListView 中覆盖字体大小,它可以工作,但这意味着我必须为每个孩子都这样做,这可能会变得非常麻烦。
我已阅读此问题和其他问题,但找不到我正在寻找的答案:
Is it possible to set a style in XAML that selectively affects controls?
【问题讨论】:
-
您不能将 TabControl 样式应用于 TabItem。 XAML 中的样式与 CSS 非常不同。它们确实继承了父级的 TextElement.FontSize,但不是通过您建议的机制。但这有点 OT —— 你想要做的是设置 TabItems 本身的样式,并明确地为它们指定你希望它们使用的任何字体大小。
-
这里是如何设置 TabItem 样式:stackoverflow.com/a/4693910/424129
-
也许我没有很好地解释自己。我正在设置 TabControl 的样式,增加选项卡中的字体大小,并最终增加背景颜色,这很有效。但它也会影响 TabItems 内的组件。我想阻止样式向下层叠
-
如果要更改 TabItems 的外观,请设置 TabItems 的样式。
-
如果是这种情况,您的 Style 需要以 TabItem 为目标,并且您将设置
HeaderTemplate的模板,如图所示 here