70 votes

Comment inclure une police externe dans une application WPF sans l'installer ?

Comment inclure une police externe dans une application WPF sans l'installer ?

J'ai essayé ce code

  System.Drawing.Text.PrivateFontCollection privateFonts = new    System.Drawing.Text.PrivateFontCollection();
  privateFonts.AddFontFile("C:\\Documents and Settings\\somefont.ttf");
  System.Drawing.Font font = new Font(privateFonts.Families[0], 12);
  this.label1.Font = font;

Il fonctionne correctement dans Windows Form Application mais pas dans WPF.

1voto

Bill Moore Points 1870

Voici ce qui a marché pour moi :

(1) Ajouter un répertoire au projet : font

(2) Déplacez le fichier de police ttf dans le répertoire des polices.

(3) Ajouter le fichier de police ttf au projet

(4) Définissez la propriété "Build" du fichier de police tff sur "Resource". (Note : J'ai utilisé "Resource" au lieu de "Embedded Resource". dans la sélection de la combobox).

(5) Ouvrez la fenêtre dans laquelle vous utilisez la police et effectuez les modifications suivantes :

<Window ... >
    <Window.Resources>
        <FontFamily x:Key="YourFontNickName">
        pack://application:,,,/font/#NameOfFont
        <!-- Note: NameOfFont can be font by double clicking
             on font from explorer and writing down name
             of the font reported.  Its not the same
             as the file name -->
        </FontFamily>   
    </Window.Resources>

    <!-- Use font as Xaml -->
    <StackPanel>
        <Textblock FontFamily="{StaticResource YourFontNickName}">
        This is a test
        </Testblock>
        <Textblock Name="text1"/>
    </StackPanel>
...
</Window>

(6) Si vous voulez changer la police de code. Faites-le :

public partial class Window1 : Window {

    // Use font as C# Code
    public void UpdateText1() {

            text1.Text      = "Hi There";
            FontFamily ff   = this.Resources["YourFontNickName"] 
                                as FontFamily;
            if (ff == null) {
                Messagebox.Show("Wrong Font Name", "ERROR");
                return;
            }
            text1.FontFamily = ff;
            text1.FontSize   = 30;
    }

    ...
}

0voto

Eric Unger Points 1

J'ai essayé de faire en sorte que cela fonctionne également avec une police différente, mais ça n'a fonctionné que dans ce format avec le fichier ./Fonts.

<FontFamily x:Key="NotoSans">pack://application:,,,./Fonts/#Noto Sans</FontFamily>

0voto

Dude4 Points 83

En quelque sorte, vraiment facile :

<TextBlock x:Name="lblTitle" FontSize="24" Margin="256,25,178,289" Text="gg" FontFamily="/FontTest;component/#Arvo"></TextBlock>

Lorsque vous importez une police, vs allez l'inclure dans la liste des polices.

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