смена выбранного цвета фона для тематического табита - PullRequest
1 голос
/ 21 февраля 2012

Я пытаюсь сделать что-то, что, на мой взгляд, будет довольно простым, но оказывается довольно сложным. Я работаю с TabControl, который уже был стилизован темой во включенной сборке, но мне бы хотелось, чтобы цвет фона TabItem при выборе TabItem был другим. Хотя я мог бы изменить это в теме в другой сборке, я бы предпочел просто переопределить ее для своего приложения.

Проблема, похоже, заключается в том, что установка цвета фона для выбранных элементов TabItems включает в себя настройку шаблона элемента управления и, в частности, триггер шаблона элемента управления для свойства IsSelected. Я не могу найти простой способ переопределить только один триггер без полного определения шаблона элемента управления (в результате получается куча ненужного кода для копирования / вставки). Вот что у меня есть сейчас - есть ли способ сократить это, чтобы охватить только ту часть, которая мне небезразлична? Кажется, что ControlTemplates не наследуются. Спасибо за любую помощь, которую вы можете предложить.

<Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <Grid>
                    <Border Name="Border"
                        Margin="0,0,-4,0"
                        Background="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDKey}}"
                        BorderBrush="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDKey}}"
                        BorderThickness="1,1,1,1"
                        CornerRadius="3,3,0,0">
                        <ContentPresenter x:Name="ContentSite"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            ContentSource="Header"
                            Margin="12,2,12,2"
                            RecognizesAccessKey="True" />
                    </Border>
                </Grid>

                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Panel.ZIndex" Value="100" />
                        <Setter TargetName="Border"
                            Property="Background"
                            Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushLightKey}}" />
                        <Setter TargetName="Border"
                            Property="BorderBrush"
                            Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushLightKey}}" />
                        <Setter Property="Foreground"
                            Value="{DynamicResource {x:Static themes:HarmonyBrushes.TextBrushLightKey}}" />
                        <Setter TargetName="Border"
                            Property="BorderThickness"
                            Value="1,1,1,0" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="Border"
                            Property="Background"
                            Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDarkKey}}" />
                        <Setter TargetName="Border"
                            Property="BorderBrush"
                            Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushDarkKey}}" />
                        <Setter Property="Foreground"
                            Value="{DynamicResource {x:Static themes:HarmonyBrushes.BrushKey}}" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground"
                            Value="{DynamicResource {x:Static themes:HarmonyBrushes.TextBrushLightKey}}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 Ответ

0 голосов
/ 22 февраля 2012

Я думаю, что самый простой способ изменить цвет - переопределить ресурс:

      <Grid>
        <Grid.Resources>
          <SolidColorBrush x:Key="{x:Static themes:HarmonyBrushes.BrushLightKey}" Color="Green" />
        </Grid.Resources>
        <TabControl>
          <TabItem>Tab One</TabItem>
          <TabItem>Tab Two</TabItem> 
        </TabControl>
      </Grid>
...