2011-03-23 89 views
0

我有一个触发器,当选中一个选项卡时,我将选项卡蓝色和文本白色上色,但问题是此触发器出于某种原因也会更改文本在tabheader主体中的颜色也在组框中变成白色。似乎任何有标题的东西都会变成白色。XAML触发器WPF选项卡选项变化超过标签标题

我如何使它所以只能在标签本身

<TabItem Header="Query Editor" <-- This text only 

头会变成白色时选择和形式没有其他文字?

以下是我正在使用的代码。

谢谢。

<Style TargetType="{x:Type TabItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <Grid> 
        <Border Name="Border" 
         Background="WhiteSmoke" 
         BorderBrush="Black" 
         BorderThickness="1,1,1,1" 
         CornerRadius="6,6,0,0"> 

         <ContentPresenter x:Name="ContentSite" 
          VerticalAlignment="Center" 
          HorizontalAlignment="Center" 
          ContentSource="Header" 
          Margin="12,2,12,2"/> 
        </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter TargetName="Border" Property="Background" Value="#00396a" /> 
         <Setter Property="Foreground" Value="White" /> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="False"> 
         <Setter TargetName="Border" Property="Background" Value="WhiteSmoke" /> 
         <Setter Property="Foreground" Value="Black" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

1

可能是TabItem.HeaderTemplate会为你工作。

 <TabControl> 
      <TabControl.Resources> 
       <DataTemplate x:Key="headerText"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <TextBlock x:Name="content" Text="{Binding}" Grid.Column="1"/> 
       </Grid> 
       <DataTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Trigger.Setters> 
          <Setter TargetName="content" Property="Foreground" Value="white" /> 
         </Trigger.Setters> 
        </Trigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
      <Style TargetType="TabItem"> 
       <Style.Setters> 
        <Setter Property="HeaderTemplate" Value="{StaticResource headerText}" /> 
       </Style.Setters> 
      </Style> 
      </TabControl.Resources> 



      <TabItem Header="fsdf" > 
       <TextBlock Text="lkajsldkjaskl" /> 
      </TabItem> 
      <TabItem Header="ghj"> 
       <TextBlock Text="ghj" /> 
      </TabItem> 
      <TabItem Header="fs556df"> 
       <TextBlock Text="jjj" /> 
      </TabItem> 
     </TabControl> 

    </TabItem> 
</TabControl> 

你可以有2headerstyle,一个正常的选择。在你的tabitem风格触发器中,你可以将headertemplate设置为“IsSelected”右边的一个。

+0

说它找不到HeaderTemplate。任何其他想法? – nitefrog 2011-03-23 08:20:49

+0

虽然这很好,但它并没有回答这个问题。我需要选项卡更改颜色,并且只有选项卡上的选项卡和选项卡的字体颜色为白色。滚动是一个很好的接触,但它仍然不能解决组框中的文本问题也受到影响。 – nitefrog 2011-03-23 22:10:58

0

解决方案!

谢谢大家的帮助。

我改变的是我删除了ContentPresenter,并用仅影响标签头本身的文本块替换它。

<TabControl.Resources> 
    <Style TargetType="{x:Type TabControl}"> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush> 
        <GradientStop Offset="0" Color="WhiteSmoke"/> 
        <GradientStop Offset="4" Color="GhostWhite"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Foreground" Value="Black" /> 
    </Style> 

    <Style TargetType="{x:Type TabItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Grid> 
         <Border Name="Border" 
          Background="WhiteSmoke" 
          BorderBrush="Black" 
          BorderThickness="1,1,1,1" 
          CornerRadius="6,6,0,0"> 

          <TextBlock 
           x:Name="TabItemContent" 
           VerticalAlignment="Center" 
           HorizontalAlignment="Center" 
           Text="{TemplateBinding Header}" 
           Margin="12,2,12,2" /> 
         </Border> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="#00396a" /> 
          <Setter Property="Foreground" TargetName="TabItemContent" Value="White"/> 
         </Trigger> 
         <Trigger Property="IsSelected" Value="False"> 
          <Setter TargetName="Border" Property="Background" Value="WhiteSmoke" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</TabControl.Resources>