J'utilise le thème standard WPF Aero.NormalColor.xaml. Et ça marche très bien. Cependant, pour l'application entière , je souhaite remplacer la couleur de premier plan des zones de texte par du rouge.Remplacer le thème standard dans App.xaml
Mon premier essai est que
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>
Eh bien ... toutes les couleurs de premier plan deviennent rouges textboxes. Cependant, toutes les zones de texte perdent le style de thème. Oui, je sais que je devrais ajouter "BasedOn". Mon deuxième essai consiste à ajouter "BasedOn" dans la balise de style.
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>
Une exception est levée. Idem que cela
Finalement, j'atteins mon but par ceci.
Dans App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Et dans toutes les fenêtres et le contrôle de l'utilisateur, je devais définir explicitement
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</UserControl.Resources>
Le code ci-dessus est de copier et coller pour de nombreuses fois et il est pas facile Maintenir. Est-ce que quelqu'un sait comment atteindre mon objectif en mettant simplement au premier plan au rouge par une fois?
J'ai travaillé pour moi - Merci. – djskinner
J'ai travaillé pour moi - mais vous devriez plutôt placer le style textbox dans un fichier de dictionnaire de ressources séparé (par exemple TextBoxStyles.xaml) et ajouter simplement un au dictionnaire fusionné. Sinon, vous pourriez faire face à un bogue avec les dictionnaires fusionnés résultant dans une situation où le style n'est pas appliqué à la première zone de texte qui est créée ... –
Schweder