2010-01-13 63 views
1

我有一个TabControlTabItem秒,TabItem■找文本和图标。要做到这一点,我必须添加一个StackPanelTabItemWPF TabItem的风格与形象

但是,一旦我添加了StackPanel,我再也无法控制文本的默认样式。

资源:

<Style TargetType="{x:Type TabItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <Grid Name="tabItem"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="*"/> 
        </Grid.RowDefinitions> 
        <Border Grid.Row="1" Name="tabItemStyle" Background="Transparent" BorderBrush="Transparent" BorderThickness="1,1,1,0" CornerRadius="3,3,0,0" SnapsToDevicePixels="True" Margin="0, 0, 5, 0"> 
         <ContentPresenter x:Name="ContentSite" TextBlock.Foreground="White" TextBlock.FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="14,3,18,3"> 
         </ContentPresenter> 
        </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter TargetName="tabItemStyle" Property="Background" Value="#ecf3f9" /> 
         <Setter TargetName="tabItemStyle" Property="BorderBrush" Value="#29458e" /> 
         <Setter TargetName="tabItemStyle" Property="BorderThickness" Value="1,1,1,0" /> 
         <Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="#29458e" /> 
        </Trigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="False" /> 
          <Condition Property="IsMouseOver" Value="True" /> 
         </MultiTrigger.Conditions> 
         <MultiTrigger.Setters> 
          <Setter TargetName="tabItemStyle" Property="Background" Value="#6381be" /> 
          <Setter TargetName="tabItemStyle" Property="BorderBrush" Value="#97acd4" /> 
          <Setter TargetName="tabItemStyle" Property="BorderThickness" Value="1,1,1,0" /> 
         </MultiTrigger.Setters> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

的TabItem:

<TabItem> 
    <TabItem.Header> 
     <StackPanel Orientation="Horizontal"> 
      <Image VerticalAlignment="Center" Source="/images/icons/_24/reports.png" Width="24" /> 
      <TextBlock VerticalAlignment="Center" Margin="5, 0" >Reports</TextBlock> 
     </StackPanel> 
    </TabItem.Header> 
</TabItem> 

相关线是在资源(风格)的ContentPresenterTextBlock.Foreground="White"不再有效。我可以看到为什么,但无法找出如何做到这一点。有任何想法吗?

+0

你可能只是在颜色的文本块定义 – 2010-01-14 02:31:27

+0

文本所有选项卡具有相同的配色方案。前景色必须在触发器中更改。否则,我会复制大量的代码。 – 2010-01-18 02:23:12

回答

0

实际TabItem只需设置相关属性。举例来说,请注意,如果你把在风格的顶部以下内容:

<Setter Property="Foreground" Value="Red" /> 

文本仍然改变。你并不需要参考ContentPresenterTextBlock,即使你做到了,你可以申请TemplateBindings它的属性,这样,当TabItem的性质改变了,所以没有ContentPresenter的。