2017-08-07 6 views
0

J'ai un TabControl qui affiche un premier en-tête et un arrière-plan différents pour un onglet sélectionné. Mais je voudrais définir une couleur générale de premier plan pour TextBlocks dans le contrôle du contenu de l'onglet. Ce qui se passe à la place, c'est que tous les en-têtes obtiennent la couleur de premier plan générale TextBlock et que le contrôle de tabulation ne modifie pas la couleur de premier plan de l'en-tête lorsque l'onglet est sélectionné.Comment remplacer le style général avec le déclencheur dans ControlTemplate?

Donc, dans ma fenêtre principale J'ai:

<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> 

et dans mon fichier de ressources J'ai défini mes couleurs et des modèles de contenu:

<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> 

Je cible 4.5 .NET sur un ordinateur Windows 10 système opérateur.

Merci, Will

Répondre

0

Définissez la propriété TextBlock.Foreground du ContentPresenter:

<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

Ouais ça ne marche pas. Pas de changement de comportement. Cela a-t-il fonctionné pour vous? – Will

+0

Oui. Quels résultats attendez-vous et quels résultats voyez-vous? – mm8

+0

Salut Merci, ce que je m'attends à ce que la couleur de premier plan dans l'onglet à la "couleur de premier plan" est sélectionné, tout le texte doit être la couleur gris foncé autrement. Ce que je vois est tout le texte est gris foncé, tout le temps, indépendamment de ce qui est sélectionné. – Will