80 votes

Comment définir la police par défaut pour une application WPF?

Je veux être en mesure de définir une famille de polices pour mon application WPF. De préférence à l'aide d'un dictionnaire de ressources comme un thème référencé d' App.xaml. J'ai essayé de créer un Style comme suit:

<Style TargetType="{x:Type Control}">
    <Setter Property="FontFamily" Value="Segoe UI" />            
</Style>

Mais cela ne fonctionne pas. Réglage du type d' TextBlock fonctionne pour la plupart des contrôles, mais il y a quelques contrôles où cela ne s'applique pas.

Je sais que vous pouvez définir la police sur une fenêtre et ont des enfants tous les contrôles de la fenêtre d'hériter de la police. Mais je pense que toutes les fenêtres de dialogue pour revenir à la valeur par défaut de la police, qui n'est pas exactement ce que je veux.

Des idées?

61voto

Ray Burns Points 38537

En supposant que vos sous-classes Window ne remplacent pas DefaultStyleKey , vous pouvez simplement les ajouter à votre style de fenêtre, car TextElement.FontFamilyProperty est une propriété héritée:

 <Style TargetType="{x:Type Window}"> 
    <Setter Property="FontFamily" Value="Segoe UI" />             
</Style> 
 

Vous devez également ajouter les éléments suivants au constructeur de votre application après l’appel InitializeComponent :

 FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
{
    DefaultValue = FindResource(typeof(Window))
});
 

Comment cela fonctionne: Une fois que l'objet App a fini de s'initialiser, le style de fenêtre spécifié dans celui-ci devient le style par défaut pour toutes les fenêtres.

13voto

jazou2012 Points 72

Un moyen simple de le faire par programme:

 public MainWindow()
{
    this.FontFamily = new FontFamily("Segoe UI");
}
 

8voto

Ehsan Ershadi Points 1349

J'ai trouvé ça :

 TextElement.FontFamilyProperty.OverrideMetadata(
typeof(TextElement),
new FrameworkPropertyMetadata(
    new FontFamily("Comic Sans MS")));

TextBlock.FontFamilyProperty.OverrideMetadata(
typeof(TextBlock),
new FrameworkPropertyMetadata(
    new FontFamily("Comic Sans MS")));
 

3voto

pileggi Points 424

J'ai trouvé une solution acceptable à ce lien:

http://blog.davidpadbury.com/2008/08/30/change-the-default-font-of-a-wpf-application/

Pileggi

0voto

LoxLox Points 79

Essayez cette solution de contournement simple dans les App.xaml (aucun code derrière nécessaire):

 <SolidColorBrush x:Key="ForeBrush" Color="Blue" />

<Style x:Key="GenericTextStyle">
    <!-- Generic control forecolor definition -->
    <Setter Property="Control.Foreground" Value="{StaticResource ForeBrush}" />

    <!-- Add a definition for each unworking nested control -->
    <Style.Resources>
        <Style TargetType="{x:Type Label}">
            <Setter Property="Foreground" Value="{StaticResource ForeBrush}" />
        </Style>
    </Style.Resources>
</Style>
 

Liez simplement le style de votre fenêtre à ceci. Fonctionne parfaitement pour moi. Seules certaines propriétés doivent être définies dans l'arborescence imbriquée. Par exemple, la propriété FontSize peut être spécifiée uniquement dans la section générique.

Je ne sais pas pourquoi il est nécessaire de faire cette astuce. C'est étrange parce que Label devrait être dérivé de Control. Quelqu'un a une idée à ce sujet?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X