Question

Je crée une application WPF et je voudrais connaître la meilleure façon d'être en mesure de changer la taille de police pour chaque élément dans l'interface utilisateur. Est-ce que je crée un dictionnaire de ressources et définir des styles pour définir la taille de la police pour tous les contrôles utiliser?

Quelle est la meilleure pratique?

Était-ce utile?

La solution

Je le ferais de cette façon:

<Window.Resources>
        <Style TargetType="{x:Type Control}" x:Key="baseStyle">
            <Setter Property="FontSize" Value="100" />
        </Style>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type Label}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource baseStyle}"></Style>
        <!-- ComboBox, RadioButton, CheckBox, etc... -->
    </Window.Resources>

De cette façon, si je veux changer toutes les commandes, je voudrais juste avoir à changer le style « baseStyle », le reste serait tout simplement en hériter. (C'est ce que la propriété BasedOn ceux-ci, vous pouvez également étendre le style de base si vous créez d'autres normalisateurs à l'intérieur du style hérité)

Autres conseils

FontSizeProperty est héritée de contrôle parental. Donc, vous avez juste besoin de changer FontSize de la fenêtre principale.

Si vous ne avez pas besoin comportement dynamique cela devrait fonctionner:

Ajouter un style de fenêtre à votre ResourceDictionary

<Style TargetType="{x:Type Window}">
     <Setter Property="FontSize" Value="15" />
</Style>

Appliquer le style à votre forme principale (ne sera pas appliquée implicitement parce que son type dérivé)

 Style = (Style)FindResource(typeof (Window));

Une autre option consiste à définir FontFamily et FontSize en tant que ressources.

<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>

De cette façon, vous pouvez les utiliser dans vos setters.

         

         

<Window> a une FontSize propriété.

Vous pouvez définir fontsize désiré dans l'élément si vous voulez changer le fontsize dans tous les éléments dans cette fenêtre.

<Window FontSize="12">

</Window>
Application.Current.MainWindow.FontSize = _appBodyFontSize;

De cette façon, vous pouvez changer la taille de la police au moment de l'exécution également.

TextElement.FontSize est une propriété Hériter, ce qui signifie que vous pouvez simplement définir la taille de la police à l'élément racine, et tous les éléments enfants utilisera cette taille (tant que vous ne les modifiez pas manuellement)

Pour tous les styles dans WPF, vous devriez avoir un dictionnaire de ressources distinct qui contient les styles pour votre application.

Si vous voulez avoir une seule taille de police qui est réutilisée dans toute l'application, puis il suffit de créer un style pour cette taille de la police. Vous pouvez donner soit un nom / clé unique d'utiliser explicitement ou vous pouvez définir un targetType qui transcendent toute l'application.

Clé explicite:

<Style
    x:Key="MyFontSize"
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<Control
    Style="{StaticResource MyFontSize}" />

* Notez que ce style peut être utilisé avec des commandes qui ont contentPresenters

Pour tous TextBlocks dans l'application:

<Style
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<TextBlock
        Text="This text will be size 10" />

Si vous devez modifier par programme FontSize global, et non statique (XAML), à appliquer une fois pour toutes vos fenêtres, vous pouvez faire:

TextElement.FontSizeProperty.OverrideMetadata(
            typeof(TextElement),
            new FrameworkPropertyMetadata(16.0));

        TextBlock.FontSizeProperty.OverrideMetadata(
            typeof(TextBlock),
            new FrameworkPropertyMetadata(16.0));

Ces valeurs sont appliquées à toute TextBlock, étiquettes et presque tous les textes dans toutes les fenêtres, alors qu'il n'a pas un FontSize explicite défini. Mais cela ne porte pas atteinte pour TextBox, vous devez écrire un code similaire pour ou tout autre contrôle spécial.

Pour modifier dynamiquement la taille des caractères à l'échelle mondiale avec ctrl-mousewheel:

XAML:

<Window Name="MainWindow" ... PreviewMouseWheel="MainWindow_PreviewMouseWheel">

code sous-jacent:

private void MainWindow_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)
    {
        if (e.Delta > 0)
            ++mainCtrl.FontSize;
        if (e.Delta < 0 && mainCtrl.FontSize > 1)
             --mainCtrl.FontSize;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top