Pergunta

I têm uma aplicação WPF (.NET 3.0, VS2008) que exibe os dados de um controlo de separador. As cores personalizadas são necessários em praticamente todos os controles nesta aplicação:. plano basicamente branco e fundo verde

O meu problema é que quando um tema XP (dizer Luna) está ativo, ele é automaticamente aplicado para tornar os controles para que o meu texto branco está escrito ... um fundo branco. Por exemplo no cabeçalho do item aba ativa: cabeçalho do item guia ilegível

Eu tentei:

  • para remover o arquivo manifesto incorporado a partir da aplicação gerado (nas propriedades do projeto):. Inúteis
  • para forçar o uso do tema clássico do Windows nos recursos do aplicativo:

    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="/PresentationFramework.Classic;V3.0.0.0;31bf3856ad364e35;component/themes/classic.xaml" />
    </ResourceDictionary.MergedDictionaries>
    

Esta última tentativa funcionou muito bem para todos os controles, exceto o controle guia que apresenta ainda como acima.

Qualquer idéia?

Atualizar : Estou suspeitando esse comportamento é devido ao estilo personalizado eu tenho que aplicar para o controle guia:

<Window.Resources>
  <Style x:Key="Custom">
    <Setter Property="Control.Background" Value="#FF47C7C8" />
    <Setter Property="Control.Foreground" Value="White" />
  </Style>
  <Style TargetType="TabControl" BasedOn="{StaticResource Custom}" />
</Window.Resources>

Então, como posso obter o tema clássico com cores personalizadas?

Foi útil?

Solução

Sua melhor aposta para garantir um comportamento consistente e aparência em todos os sistemas operacionais, seria a re-modelo o controle TabItem e então usar um gatilho para modificar uma parte do seu novo modelo, quando um TabItem é selecionado. Tente algo como o seguinte:

<Grid>
<Grid.Resources>
  <Style x:Key="Custom">
    <Setter Property="Control.Background" Value="#FF47C7C8"/>
    <Setter Property="Control.BorderBrush" Value="#FF47C7C8"/>
    <Setter Property="Control.Foreground" Value="White"/>
  </Style>
  <Style BasedOn="{StaticResource Custom}" TargetType="TabControl"/>
  <Style TargetType="TabItem">
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type TabItem}">
          <Grid>
            <Border
              Name="Border"
              Background="#FF47C7C8"
              BorderBrush="#FFFFFF"
              BorderThickness="1,1,1,1"
              CornerRadius="2,2,0,0">
              <ContentPresenter
                x:Name="ContentSite"
                HorizontalAlignment="Center"
                Margin="12,2,12,2"
                VerticalAlignment="Center"
                ContentSource="Header"
                RecognizesAccessKey="True"/>
            </Border>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsSelected" Value="True">
              <Setter Property="Panel.ZIndex" Value="100"/>
              <Setter TargetName="Border" Property="Background" Value="#FF47C7C8"/>
              <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0"/>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</Grid.Resources>
<TabControl>
  <TabItem Header="Item 1"/>
  <TabItem Header="Item 2"/>
  <TabItem Header="Item 3"/>
  <TabItem Header="Item 4"/>
</TabControl>

Bon chance!

Outras dicas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top