XAML Trigger WPF Выбор вкладки изменяется больше, чем заголовок вкладки - PullRequest
0 голосов
/ 23 марта 2011

У меня есть триггер, который, когда вкладка выбрана, окрашивает вкладку в синий цвет, а текст - белый, но проблема в том, что этот триггер по какой-то причине также меняет цвет текста в теле заголовка табуляции на белый, а групповые ящики. Кажется, что все, что имеет заголовок, становится белым.

Как мне сделать так, чтобы только заголовок в самой вкладке

<TabItem Header="Query Editor" <-- This text only

изменится на белый при выборе, а другой текст в форме будет отсутствовать?

Ниже приведен код, который я использую.

Спасибо.

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <Grid>
                    <Border Name="Border"
                        Background="WhiteSmoke"
                        BorderBrush="Black"
                        BorderThickness="1,1,1,1"
                        CornerRadius="6,6,0,0">

                        <ContentPresenter x:Name="ContentSite"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            ContentSource="Header"
                            Margin="12,2,12,2"/>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="Border" Property="Background" Value="#00396a" />
                        <Setter Property="Foreground" Value="White" />
                    </Trigger>
                    <Trigger Property="IsSelected" Value="False">
                        <Setter TargetName="Border" Property="Background" Value="WhiteSmoke" />
                        <Setter Property="Foreground" Value="Black" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ответы [ 2 ]

1 голос
/ 23 марта 2011

может быть TabItem.HeaderTemplate будет работать для вас.

        <TabControl>
            <TabControl.Resources>
                 <DataTemplate x:Key="headerText">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <TextBlock x:Name="content" Text="{Binding}" Grid.Column="1"/>
                </Grid>
                <DataTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Trigger.Setters>
                            <Setter TargetName="content" Property="Foreground" Value="white" />
                        </Trigger.Setters>
                    </Trigger>
                </DataTemplate.Triggers>
            </DataTemplate>
            <Style TargetType="TabItem">
                <Style.Setters>
                    <Setter Property="HeaderTemplate" Value="{StaticResource headerText}" />
                </Style.Setters>
            </Style>
            </TabControl.Resources>



            <TabItem Header="fsdf" >
                <TextBlock Text="lkajsldkjaskl" />
            </TabItem>
            <TabItem Header="ghj">
                <TextBlock Text="ghj" />
            </TabItem>
            <TabItem Header="fs556df">
                <TextBlock Text="jjj" />
            </TabItem>
        </TabControl>

    </TabItem>
</TabControl>

Вы можете выбрать 2headerstyle, один обычный. в ваших триггерах в стиле tabitem вы можете установить шаблон заголовка справа "IsSelected".

0 голосов
/ 24 марта 2011

Решение!

Спасибо всем за помощь.

Что я изменил, так это то, что я удалил ContentPresenter и заменил его текстовым блоком, который влиял только на сам заголовок вкладки.

<TabControl.Resources>
    <Style TargetType="{x:Type TabControl}">
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush>
                    <GradientStop Offset="0" Color="WhiteSmoke"/>
                    <GradientStop Offset="4" Color="GhostWhite"/>
                 </LinearGradientBrush>
             </Setter.Value>
         </Setter>
         <Setter Property="Foreground" Value="Black" />
     </Style>

     <Style TargetType="{x:Type TabItem}">
         <Setter Property="Template">
             <Setter.Value>
                 <ControlTemplate TargetType="{x:Type TabItem}">
                     <Grid>
                         <Border Name="Border"
                             Background="WhiteSmoke"
                             BorderBrush="Black"
                             BorderThickness="1,1,1,1"
                             CornerRadius="6,6,0,0">

                             <TextBlock 
                                 x:Name="TabItemContent" 
                                 VerticalAlignment="Center"
                                 HorizontalAlignment="Center"
                                 Text="{TemplateBinding Header}"
                                 Margin="12,2,12,2" />
                         </Border>
                     </Grid>
                     <ControlTemplate.Triggers>
                         <Trigger Property="IsSelected" Value="True">
                             <Setter TargetName="Border" Property="Background" Value="#00396a" />
                             <Setter Property="Foreground" TargetName="TabItemContent" Value="White"/>
                         </Trigger>
                         <Trigger Property="IsSelected" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="WhiteSmoke" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</TabControl.Resources>
...