Je veux pouvoir définir une famille de polices pour mon application WPF. Utiliser de préférence un dictionnaire de ressources comme thème référencé à partir de 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 ça ne marche pas. La définition du type sur 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 que tous les contrôles enfants de cette fenêtre héritent de la police. Mais je pense que toutes les fenêtres de dialogue reviendront à la police par défaut, ce qui n'est pas exactement ce que je veux.
Des idées?
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 à votre constructeur d'application après l'appel InitializeComponent
:
FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
{
DefaultValue = FindResource(typeof(Window))
});
Fonctionnement: une fois l'initialisation de l'objet App terminée, le style de fenêtre spécifié dans celui-ci devient le style par défaut pour toutes les fenêtres.
La plupart des solutions proposées n'ont pas fonctionné pour moi. Ma solution simple:
Ajoutez ceci à App.xaml:
<Style TargetType="{x:Type Window}">
<Setter Property="FontSize"
Value="14" />
</Style>
Ajoutez ceci dans votre constructeur MainWindow (après InitializeComponent):
Style = (Style)FindResource(typeof(Window));
Une façon simple de le faire par programme:
public MainWindow()
{
this.FontFamily = new FontFamily("Segoe UI");
}
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")));
En fait, vous pouvez obtenir une solution XAML complète combinant certaines des autres réponses ici.
Si votre fenêtre principale s'appelle WinMain
(celle que vous chargez avant toutes les autres), ajoutez simplement une référence à un style nommé par ex. WinAll
<Window x:Class="MyNamespace.WinMain"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.Microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="WinMain" Height="450" Width="800"
Style="{StaticResource WinAll}">
puis définissez votre style de cette façon
<Style x:Key="WinAll" TargetType="{x:Type Window}">
<Setter Property="FontFamily"
Value="Comic Sans MS" />
<Setter Property="FontSize"
Value="14" />
</Style>