2017-08-07 48 views
0

我有一个TabControl为选定的选项卡显示不同的Tab标题前景和背景。但我想为选项卡内容控件中的TextBlocks设置一个通用前景色。正在发生的事情是,所有标题都获得常规TextBlock前景色,并且选项卡被选中时,选项卡控件不会更改标题的前景色。如何使用ControlTemplate中的触发器覆盖常规样式?

所以在我的主窗口中我有:

<Grid> 
    <TabControl Style="{StaticResource TabControlStyle}"> 
     <TabItem Header="Tab 1" IsSelected="True"> 
      <TextBlock Text="Text in Tab 1"/> 
     </TabItem> 
     <TabItem Header="Tab 2"> 
      <TextBlock Text="Text in Tab 2"/> 
     </TabItem> 
    </TabControl> 
</Grid> 

,在我的资源文件我已经定义我的色彩和内容模板:

<Color x:Key="DarkGray">#404040</Color> 
<Color x:Key="DarkGreen">#3A5038</Color> 
<Color x:Key="ForegroundColor">#FFF1F1F1</Color> 

<SolidColorBrush x:Key="DarkGrayBrush" 
       Color="{StaticResource DarkGray}" /> 
<SolidColorBrush x:Key="ForegroundColorBrush" 
       Color="{StaticResource ForegroundColor}" /> 
<SolidColorBrush x:Key="DarkGreenBrush" 
       Color="{StaticResource DarkGreen}" /> 

<Style TargetType="TextBlock"> 
    <Setter Property="Foreground" 
      Value="{StaticResource DarkGrayBrush}" /> 
</Style> 

<Style x:Key="TabControlStyle" 
     TargetType="TabControl"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="TabControl"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <TabPanel Grid.Row="0" 
           Background="{TemplateBinding Background}" 
           IsItemsHost="true" /> 
        <ContentPresenter Grid.Row="1" 
             ContentSource="SelectedContent" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Resources> 
     <Style TargetType="TabItem"> 
      <Setter Property="BorderThickness" 
        Value="0" /> 
      <Setter Property="FontSize" 
        Value="16" /> 
      <Setter Property="HeaderTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <Border> 
          <ContentPresenter Content="{TemplateBinding Content}" /> 
         </Border> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="TabItem"> 
         <Border Name="Border" 
           Width="145" 
           Margin="10" 
           Padding="0" 
           BorderThickness="0" 
           CornerRadius="20"> 
          <ContentPresenter x:Name="ContentSite" 
               Margin="10" 
               HorizontalAlignment="Center" 
               VerticalAlignment="Center" 
               ContentSource="Header" /> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" 
            Value="True"> 
           <Setter TargetName="Border" 
             Property="Background" 
             Value="{StaticResource DarkGreenBrush}" /> 
           <Setter Property="Foreground" 
             Value="{StaticResource ForegroundColorBrush}" /> 
          </Trigger> 
          <Trigger Property="IsSelected" 
            Value="False"> 
           <Setter Property="Foreground" 
             Value="{StaticResource DarkGrayBrush}" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Style.Resources> 
</Style> 

我在Windows 10目标.NET 4.5操作系统。

感谢,威尔

回答

0

设置ContentPresenterTextBlock.Foreground属性:

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="TabItem"> 
      <Border Name="Border" 
           Width="145" 
           Margin="10" 
           Padding="0" 
           BorderThickness="0" 
           CornerRadius="20"> 
       <ContentPresenter x:Name="ContentSite" 
               Margin="10" 
               HorizontalAlignment="Center" 
               VerticalAlignment="Center" 
               ContentSource="Header" TextBlock.Foreground="{StaticResource DarkGrayBrush}" /> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter TargetName="Border" 
             Property="Background" 
             Value="{StaticResource DarkGreenBrush}" /> 
        <Setter TargetName="ContentSite" Property="TextBlock.Foreground" 
          Value="{StaticResource ForegroundColorBrush}" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 
+0

是啊,这是行不通的。行为没有变化。这对你有用吗? – Will

+0

是的。你期待什么结果,你看到了什么结果? – mm8

+0

嗨谢谢,我所期望的是选中时前景色为“前景色”,否则所有文本为深灰色。无论选择什么,我所看到的是所有的文字都是深灰色的。 – Will