8
votes

Remplacer le thème standard dans App.xaml

J'utilise le thème WPF Standard Aero.normalcolor.xaml. Et ça marche très bien. Cependant, pour l'application entière forte>, je voudrais remplacer la couleur de premier plan des boîtes de texte en rouge.

Mon premier essai est que P>

<UserControl.Resources>
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
        <Setter Property="Foreground" Value="Red" />
    </Style>
</UserControl.Resources>


0 commentaires

3 Réponses :


2
votes

Je pense que vous pouvez ajouter le code> code> à un dossier code> et la fusionner avec le thème Aero, comme celui-ci:

<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>

      <!-- Adding the style to a resource dictionary -->
      <ResourceDictionary>
        <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
          <Setter Property="Foreground" Value="Red" />
        </Style>
      </ResourceDictionary>

    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>


1 commentaires

A travaillé pour moi à - mais vous devriez mieux placer le style Textbox dans un fichier de dictionnaire de ressources séparé (E.g. textboxstyles.xaml) et simplement ajouter une au dictionnaire fusionné. Autrement, vous pourriez faire face à un bug avec des dictionnaires fusionnés entraînant une situation où le style n'est pas appliqué à la première zone de texte créée ...



1
votes

J'ai eu le même problème et j'ai essayé l'approche d'Oskar. Cependant, cela a causé un comportement étrange. En particulier, les styles ne s'appliquaient pas à certains contrôles, tout en appliquant d'autres contrôles du même type. Et je ne pouvais trouver aucune différence majeure entre ces contrôles.

J'ai poursuivi la recherche de la solution et j'en ai trouvé une ici: http: // social .msdn.microsoft.com / Forums / FR-US / WPF / Thread / 91718816-8674-4AD8-A3C8-AE283BEBE224 /

Ce n'est toujours pas parfait et clair, mais ça marche, au moins pour moi.

en bref, vous pouvez obtenir l'idée du code suivant: xxx

pour la maintenabilité et la lisibilité, ces objets dossiers imbriqués peuvent aller séparer les fichiers XAML.


0 commentaires

0
votes

La réponse exacte pour cette question est la réglage de tous les styles personnalisés en fonction de la valeur de la ressource statique du contrôle actuel. Cependant, une certaine contrôle peut ne pas avoir de style par défaut comme ListView ou ListVievem. XXX PRE>

Ce style peut localiser dans n'importe quel type dictionnaire de ressources similaire à la fenêtre Ressources de la fenêtre, Ressources de réseau, Textbox Ressources ou Dictionnaire de ressources externes. p>

Enfin, vous devez ajouter un thème de dictionnaire de ressources à vos ressources de votre application, telles que le code suivant que j'ajoute un thème Aero à mon application. P>

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
            <ResourceDictionary Source="/Themes/Default.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>


0 commentaires