WPF TabItem标题样式

时间:2017-01-06 18:27:09

标签: c# wpf xaml

我正在编写一个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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

<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>