2009-07-02 7 views
3

タブがアクティブになるたびにTabItemのテキストの前景を変更したいと思っています。何ネストされたテキストを含むWPF TabItemのテキストの前景を変更するにはどうすればよいですか?

<TabControl Style="{DynamicResource SidebarTabControl}"> 
    <TabItem Style="{DynamicResource SidebarTab}"> 
     <TabItem.Header> 
      <StackPanel Orientation="Horizontal"> 
       <Image Height="16" Source="..\..\Icons\cog.png" /> 
       <TextBlock Text="TabItem" Margin="5,0,0,0" VerticalAlignment="Center" /> 
      </StackPanel> 
     </TabItem.Header> 
    </TabItem> 
</TabControl> 

テキストの前景色を:私はのTabItemを変更した場合

<TabControl Style="{DynamicResource SidebarTabControl}"> 
    <TabItem Header="TabItem" Style="{DynamicResource SidebarTab}" /> 
</TabControl> 

<Style x:Key="SidebarTabForegroundStyleSelected"> 
    <Setter Property="TextBlock.Foreground" Value="White" /> 
</Style> 

<Style x:Key="SidebarTabForegroundStyle"> 
    <Setter Property="TextBlock.Foreground" Value="Black" /> 
</Style> 

<Style x:Key="SidebarTab" TargetType="TabItem"> 
    <Setter Property="Padding" Value="10,12,2,12" /> 
    <Setter Property="BorderThickness" Value="0,1,0,1" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <Border Padding="{TemplateBinding Padding}" 
        Name="tab" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        BorderBrush="{StaticResource SidebarTabBorderBrush}" 
        SnapsToDevicePixels="True"> 
        <ContentPresenter Style="{StaticResource SidebarTabForegroundStyle}" Name="content" ContentSource="Header" /> 
       </Border> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter TargetName="tab" Property="Background" Value="{StaticResource SidebarTabBackgroundBrushSelected}" /> 
         <Setter TargetName="tab" Property="BorderBrush" Value="{StaticResource SidebarTabBorderBrushSelected}" /> 
         <Setter TargetName="content" Property="Style" Value="{StaticResource SidebarTabForegroundStyleSelected}" /> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="False"> 
         <Setter TargetName="tab" Property="Background" Value="{StaticResource SidebarTabBackgroundBrush}" /> 
         <Setter TargetName="tab" Property="BorderBrush" Value="{StaticResource SidebarTabBorderBrush}" /> 
         <Setter TargetName="content" Property="Style" Value="{StaticResource SidebarTabForegroundStyle}" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 

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

:私はタブに表示されているコンテンツの種類を変更しなくなるまで正常に動作しており、以下を使用していましたタブが選択されているときには、白になり、タブが選択されなくなったときに黒に戻ります。他のすべてが正しく動作します。

上記のXAMLのフォアグラウンドの色を変更する方法があるかどうかは知っていますか?

+0

を、それはあなたのトリガをオーバーライドしています、のContentPresenterに自分のスタイルを削除します。http://msdn.microsoft.com/en-us/ library/ms743230.aspx – rmoore

+0

ありがとう、あなたの質問は私が聞いていたのと同様の質問に答えるのを助けました。 – IbrarMumtaz

答えて

4

スタイルにコントロールテンプレートからトリガーを移動:

<Grid> 
    <Grid.Resources> 
     <SolidColorBrush x:Key="SidebarTabBackgroundBrushSelected" Color="Gray"></SolidColorBrush> 
     <SolidColorBrush x:Key="SidebarTabBorderBrushSelected" Color="Blue"></SolidColorBrush> 
     <SolidColorBrush x:Key="SidebarTabBackgroundBrush" Color="LightGray"></SolidColorBrush> 
     <SolidColorBrush x:Key="SidebarTabBorderBrush" Color="Green"></SolidColorBrush> 

     <Style x:Key="SidebarTab" TargetType="TabItem"> 
      <Setter Property="Padding" Value="10,12,2,12" /> 
      <Setter Property="BorderThickness" Value="0,1,0,1" /> 
      <Setter Property="Foreground" Value="Blue"></Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TabItem}"> 
         <Border Padding="{TemplateBinding Padding}" 
       Name="tab" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       BorderBrush="{StaticResource SidebarTabBorderBrush}" 
       SnapsToDevicePixels="True"> 
          <ContentPresenter Name="content" 
               ContentSource="Header" /> 
         </Border> 

         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="True"> 
           <Setter TargetName="tab" Property="Background" Value="{StaticResource SidebarTabBackgroundBrushSelected}" /> 
           <Setter TargetName="tab" Property="BorderBrush" Value="{StaticResource SidebarTabBorderBrushSelected}" /> 
          </Trigger> 
          <Trigger Property="IsSelected" Value="False"> 
           <Setter TargetName="tab" Property="Background" Value="{StaticResource SidebarTabBackgroundBrush}" /> 
           <Setter TargetName="tab" Property="BorderBrush" Value="{StaticResource SidebarTabBorderBrush}" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 

        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="Foreground" Value="Red"></Setter> 
       </Trigger> 
       </Style.Triggers> 
     </Style> 
    </Grid.Resources> 
    <TabControl Style="{DynamicResource SidebarTabControl}"> 
     <TabItem Header="TabItem 1" Style="{DynamicResource SidebarTab}" /> 
     <TabItem Style="{DynamicResource SidebarTab}" > 
      <TabItem.Header> 
       <StackPanel> 
        <TextBlock Text="a"></TextBlock> 
        <TextBlock Text="b"></TextBlock> 
       </StackPanel> 
      </TabItem.Header> 
     </TabItem> 
     <TabItem Header="TabItem 3" Style="{DynamicResource SidebarTab}" /> 
    </TabControl> 
</Grid> 
+0

ありがとうございました。 –

0

それは間違ったプロパティに設定されているので、問題が来ているように見えます:

<Style x:Key="SidebarTabForegroundStyleSelected"> 
    <Setter Property="TextBox.Foreground" Value="White" /> 
</Style> 

<Style x:Key="SidebarTabForegroundStyle"> 
    <Setter Property="TextBox.Foreground" Value="Black" /> 
</Style> 

をあなたがするので、またTextElement.ForegroundまたはTextBlock.Foreground

を設定する必要がありますこれは継承されたプロパティです。AttachedPropertyをTabItemsに直接設定することができます。コンテンツに特別に割り当てる必要はありません。

<TabControl Style="{DynamicResource SidebarTabControl}"> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="{x:Type TabItem}"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" 
         Value="True"> 
        <Setter Property="TextElement.Foreground" 
          Value="Red" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TabControl.ItemContainerStyle> 
    <TabItem> 
     <TabItem.Header> 
      <StackPanel Orientation="Horizontal"> 
       <Image Height="16" 
         Source="..\..\Icons\cog.png" /> 
       <TextBlock Text="TabItem" 
          Margin="5,0,0,0" 
          VerticalAlignment="Center" /> 
      </StackPanel> 
     </TabItem.Header> 
     Item 1 
    </TabItem> 
    <TabItem> 
     <TabItem.Header> 
      <TextBlock Text="Tab 2" /> 
     </TabItem.Header> 
     Item 2 
    </TabItem> 
    <TabItem Header="Item 3"> 
     Item 3 
    </TabItem> 
</TabControl> 
+0

おっと、私の一部に誤植。それはTextBlock.Foregroundだったはずです。私はあなたが提案したものを試してみましたが、StackPanelテキストで目的の結果を得られませんでした。 –

+1

あなたのコントロールテンプレートでそれを更新しようとすると、スタイルを取り除いてください: スタイルは直接設定されていますコントロールテンプレートのトリガーよりコンテンツプレゼンターの優先順位が高くなります。http://msdn.microsoft.com/en-us/library/ms743230.aspx – rmoore

関連する問題