Como desativar temas XP no aplicativo WPF?
-
03-07-2019 - |
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:
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?
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
Por que você não usar os Temas WPF a partir do projeto WPF Futures! WPF Temas