【问题标题】:WPF TabItem Header Styling ONLY仅 WPF TabItem 标题样式
【发布时间】: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&lt;Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}"&gt;
  • 你摇滚!这解决了我的问题。我的文本块元素显示正确。我不是 XAML / WPF 专家,我可能从未找到该解决方案。再次感谢!!!

标签: c# wpf xaml


【解决方案1】:

当您为 WPF 控件编写新样式时,如果您不完全重新设计所有内容,最好使其继承现有的隐式样式。那里可能还有很多其他你不想丢失的东西,看起来就是这种情况。尝试像这样将BasedOn 属性设置为隐式TabItem 样式:

<Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">

看看是否有帮助。

在 WPF 中,runtime Type of a control is conventionally used as the resource key for the style that's applied to it by default

【讨论】:

    【解决方案2】:

    您也可以在外部定义样式。该样式将帮助您包装标题内容并将标题内容与中心对齐。

    <Style x:Key="newTabItemStyle" TargetType="{x:Type TabItem}">
      <setter property="MaxWidth" value="150"/>
      <Setter Property="HeaderTemplate">
        <Setter.Value>
          <DataTemplate >
            <TextBlock  TextWrapping="Wrap" Text="{Binding}"  TextAlignment="Center"/>
          </DataTemplate>
       </Setter.Value>
    </Setter>
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 2016-04-22
      • 2012-09-07
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2013-09-27
      • 1970-01-01
      相关资源
      最近更新 更多