2012-04-11 33 views
2

我已經在WPF XAML(.NET 4)中設計了一個TabControl風格,我所能做的就是基於觸發器的樣式選項卡或完全相同的樣式。有什麼辦法只有第一個標籤的風格不同,而其他標籤的風格化與第一個標籤不同,但彼此相同(也可以使用Tab索引來設計一個TabItem)。如何更改WPF中單個選項卡項目標題的背景?

謝謝。

+0

使用數據觸發器有什麼問題? – 2012-04-11 10:16:09

+0

它可能會被使用,但是有什麼方法可以將樣式應用到一個選項卡項中? – 2012-04-11 10:23:31

+0

你很可能需要一個自定義轉換器,它返回其父'Items'集合中每個'TabItem'的索引;其餘的對於觸發器來說是微不足道的。 – Jon 2012-04-11 10:31:40

回答

5

您可以使用AlternationCount和AlternationIndex:

<TabControl AlternationCount="{Binding Path=Items.Count,RelativeSource={RelativeSource Self}}"> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="TabItem"> 
      <Style.Triggers> 
       <Trigger Property="ItemsControl.AlternationIndex" 
          Value="0"> <!-- First item --> 
        <Setter Property="FontWeight" 
          Value="Bold"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TabControl.ItemContainerStyle> 
    <TabItem Header="First"/> 
    <TabItem Header="Second"/> 
    <TabItem Header="Third"/> 
    <TabItem Header="Fourth"/> 
</TabControl> 
3

如果你想改變只是選擇的選項卡項的背景顏色,然後用那種風格和樣式應用於標籤項目。

<Style TargetType="{x:Type TabItem}" x:Key="TabItemStyle"> 
    <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Grid> 
         <Border Name="Border" Background="Red" BorderBrush="#FF1467AF" 
            BorderThickness="1" 
            Margin="0,0,5,0" CornerRadius="8,8,0,0" SnapsToDevicePixels="True"> 
          <TextBlock FontFamily="Arial" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" Name="TextBlock" Foreground="White"> 
         <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2"/> 
          </TextBlock> 
         </Border> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="Yellow"/> 

         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 

但是,如果你想只改變第一個標籤項的背景顏色,然後定義兩種樣式,並應用一個第一片項目,第二個到其他

風格爲標籤項目1:

<Style TargetType="{x:Type TabItem}" x:Key="TabItemStyleForFirst"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Grid> 
         <Border Name="Border" Background="Red" BorderBrush="#FF1467AF" 
            BorderThickness="1" 
            Margin="0,0,5,0" CornerRadius="8,8,0,0" SnapsToDevicePixels="True"> 
          <TextBlock FontFamily="Arial" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" Name="TextBlock" Foreground="White"> 
         <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2"/> 
          </TextBlock> 
         </Border> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 

樣式其他選項卡項目:

<Style TargetType="{x:Type TabItem}" x:Key="TabItemStyleForOther"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Grid> 
         <Border Name="Border" Background="Yellow" BorderBrush="#FF1467AF" 
            BorderThickness="1" 
            Margin="0,0,5,0" CornerRadius="8,8,0,0" SnapsToDevicePixels="True"> 
          <TextBlock FontFamily="Arial" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" Name="TextBlock" Foreground="White"> 
         <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2"/> 
          </TextBlock> 
         </Border> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 
相關問題