2011-03-23 32 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>