【问题标题】:Change TabItem's Header FontWeight更改 TabItem 的 Header FontWeight
【发布时间】:2015-06-10 13:22:12
【问题描述】:

IsSelected = True 从我的ResourceDictionary 时,我想将TabItemHeader FontWeight 更改为Bold

一些代码

 <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <Grid>
                    <Border Name="Border"
                            Background="White"
                            BorderBrush="White" 
                            BorderThickness="1,1,1,0"
                            Margin="0,0,0,-1" >
                        <ContentPresenter x:Name="ContentSite"
                                          Height="25"
                                          VerticalAlignment="Bottom"
                                          HorizontalAlignment="Center"
                                          ContentSource="Header"
                                          Margin="12,2,12,2"/>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="Border" Property="Background" Value="#F2F1F0" />
                        <Setter TargetName="Border" Property="BorderBrush" Value="Gray" />
                        <Setter TargetName="Border" Property="BorderThickness" Value="0.5,0.7,0.5,0" />
                        <Setter Property="Header">
                            <Setter.Value>
                                <TextBlock Text="{Binding Path=Header.Title, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}"
                                           FontWeight="Bold" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="IsSelected" Value="False">
                        <Setter TargetName="Border" Property="Background" Value="White" />
                        <Setter TargetName="Border" Property="BorderBrush" Value="Gray" />
                        <Setter TargetName="Border" Property="BorderThickness" Value="0,0,0,0.5" />
                    </Trigger>

.....etc.....

上述方法不起作用。还设置HeaderTemplate 而不是Header 它可以工作,但它会破坏我的模板。最后,将TextBlock.FontWeight 设置为Trigger 内的Property 会更改TabItem 内的所有TextBlocks。

有什么建议吗?

更新

我选择了@ShineKing 的答案,因为它帮助我解决了我的问题。基本上我所做的是将DataTrigger 添加到TextBlock 用作Header 到我的“自定义”TabItem

            <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}" Value="True">
                        <Setter Property="FontWeight" Value="Bold"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>

【问题讨论】:

  • 我很确定HeaderTemplate 是来这里的正确方式。当你应用这个时,你的模板到底发生了什么?
  • 我正在使用“自定义”TabItem,其中我使用图像 (x) 进行关闭。因此,当我设置 HeaderTemplate 时,我正在丢失图像(如预期的那样)。
  • 我只想要一个干净的解决方案,而不是每次选择 TabItem 时都重新构建模板。

标签: wpf tabs controltemplate


【解决方案1】:

您可以尝试使用此代码将 TextBlock 更改为粗体

<TabControl>
   <TabControl.Resources>
      <Style TargetType="TextBlock" x:Key="HeaderTextBlockStyle">
         <Style.Triggers>
            <DataTrigger Binding="{Binding IsSelected,
                          RelativeSource={RelativeSource AncestorType=TabItem}}"
                         Value="True">
                <Setter Property="FontWeight" Value="Bold"/>
             </DataTrigger>
          </Style.Triggers>
       </Style>
    </TabControl.Resources>
    <TabItem>
       <TabItem.Header>
          <TextBlock Text="Header Text"
                     Style="{StaticResource HeaderTextBlockStyle}"/>
       </TabItem.Header>
    </TabItem>
</TabControl>

【讨论】:

  • 在您的标题中,您同时拥有图像和文本块。您肯定只需要使用 Datatriggers 来切换前景色
  • 你可能是对的......我会尝试类似于你的答案的东西,我会告诉你的。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多