Come includere i font esterno in applicazione WPF senza installarlo

Come includere i font esterno in applicazione WPF senza installarlo

Ho provato questo codice

  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;

Che funziona correttamente in Applicazione Windows Form, ma non in WPF.

InformationsquelleAutor Shebin | 2011-06-23



11 Replies
  1. 24

    I codice XAML:

    <Style x:Key="Hatten">
            <Setter Property="TextElement.FontFamily" Value="Resources/#HATTEN" />
    </Style>

    #HATTEN – riferimento a hatten.tft in Risorse.

    Usando lo Stile:

     <TextBlock x:Name="lblTitle" Style="{DynamicResource Hatten}" FontSize="72"></TextBlock>
    • Funziona per il sistema organizzato di NEGOZIAZIONE caratteri?
    • Non l’ho provato e non sono sicuro.
    • Il frammento di codice <Style> è incompleta/fuorviante. Meglio seguire MovGP0 risposta. Fondamentalmente è lo stesso, ma più dettagliato. Sistema organizzato di NEGOZIAZIONE opere.
    • Non funziona per me in VS2017.
    • In VS2017 si può semplicemente aggiungere una cartella tipi di carattere per la vostra fonte di Risorse e si può quindi scegliere il tipo di carattere con il menù a discesa casella, cercando qualcosa di simile a questo: FontFamily="/AppName;component/Fonts/#Font Name"
  2. 87

    Sono due modi di fare questo. Un modo è quello di pacchetto di font all’interno dell’applicazione. L’altro modo è quello di avere il font la cartella di output separatamente. La differenza è soprattutto l’URI è necessario caricare il file.

    Pacchetto con Applicazione

    1. Aggiungere un /Fonts cartella per la vostra soluzione.
    2. Aggiungere i Font True Type (*.ttf) file in quella cartella
    3. Includono i file di progetto
    4. Selezionare i tipi di carattere e di aggiungerli alla soluzione
    5. Set BuildAction: Resource e Copy To Output Directory: Do not copy. Il .csproj file dovrebbe avere una sezione come questa:

       <ItemGroup>
        <Resource Include="Fonts\NotoSans-Bold.ttf" />
        <Resource Include="Fonts\NotoSans-BoldItalic.ttf" />
        <Resource Include="Fonts\NotoSans-Italic.ttf" />
        <Resource Include="Fonts\NotoSans-Regular.ttf" />
        <Resource Include="Fonts\NotoSansSymbols-Regular.ttf" />
      </ItemGroup>
    6. In App.xaml aggiungere <FontFamily> Risorse. Dovrebbe apparire come nel seguente codice di esempio. Nota che l’URI non contengono il nome del file quando l’imballaggio con l’applicazione.

      <Applicaton ...>
      <Application.Resources>
          <FontFamily x:Key="NotoSans">pack://application:,,,/Fonts/#Noto Sans</FontFamily>
          <FontFamily x:Key="NotoSansSymbols">pack://application:,,,/Fonts/#Noto Sans Symbols</FontFamily>
      </Application.Resources>
      </Application>
    7. Applicare il Font come questo:

      <TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}" 
                 FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
    8. È anche possibile impostare il tipo di carattere imperativo:

      myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans");

    Copia nella Directory di Output

    1. Aggiungere un /Fonts cartella per la vostra soluzione.
    2. Aggiungere i Font True Type (*.ttf) i file che ordine
    3. Includono i file di progetto
    4. Selezionare i tipi di carattere e di aggiungerli alla soluzione
    5. Set BuildAction: Content e Copy To Output Directory: Copy if newer. Il .csproj file dovrebbe avere una sezione come questa:

       <ItemGroup>
        <Content Include="Fonts\NotoSans-Bold.ttf">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
        <Content Include="Fonts\NotoSans-BoldItalic.ttf">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
        <Content Include="Fonts\NotoSans-Italic.ttf">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
        <Content Include="Fonts\NotoSans-Regular.ttf">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
        <Content Include="Fonts\NotoSansSymbols-Regular.ttf">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
      </ItemGroup>
    6. In App.xaml aggiungere <FontFamily> Risorse. Dovrebbe apparire come nel seguente codice di esempio. Nota che l’URI non contengono il nome del file quando l’imballaggio con l’applicazione.

      <Applicaton ...>
      <Application.Resources>
          <FontFamily x:Key="NotoSansRegular">./Fonts/NotoSans-Regular.tts#Noto Sans</FontFamily>
          <FontFamily x:Key="NotoSansItalic">./Fonts/NotoSans-Italic.tts#Noto Sans</FontFamily>
          <FontFamily x:Key="NotoSansBold">./Fonts/NotoSans-Bold.tts#Noto Sans</FontFamily>
          <FontFamily x:Key="NotoSansBoldItalic">./Fonts/NotoSans-BoldItalic.tts#Noto Sans</FontFamily>
          <FontFamily x:Key="NotoSansSymbols">./Fonts/NotoSans-Regular.tts#Noto Sans Symbols</FontFamily>
      </Application.Resources>
      </Application>
    7. Applicare il Font come questo:

      <TextBlock Text="foobar" FontFamily="{StaticResource NotoSansRegular}" 
                 FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />

    Riferimenti

    • Si prega di chiarire dove #names e come sono costruiti. Solo il nome del file senza estensioni preceduta da #? Altrimenti: grande, dettagliata risposta!
    • la stringa dopo l’hash è il nome del tipo di carattere. purtroppo non so come farli, a eccezione di aprire il file del tipo di carattere in anteprima o installando e utilizzando la selezione del tipo di carattere in un editor di testo. ci potrebbe essere un modo migliore di fare questo…
    • Il pacchetto di opzione non funziona per me in VS2017. Ho seguito le istruzioni alla lettera.
    • Passo “6” nel “Pacchetto con Applicazione di” lavori in VS2015, ma… in fase di runtime applicazione mostra solo le caselle vuote! Ho rimosso “FontFamily” di risorse e tipo di carattere specificato direttamente in stile Setter: <Setter Property="FontFamily" Value="./media/#FontAwesome"/>
    • Ho seguito la procedura descritta in “Pacchetto con Applicazione” VS2017, ma non ha funzionato. Ma dopo che ho cambiato build action per Content e Copy to Output Directory per Copy if newer, funziona ottimamente.
    • Questo soffre di WPF problema di perdita di memoria, come dettagliato nella stackoverflow.com/questions/31452443/… così come tutte le altre soluzioni dato che qui sembra.
    • Ho provato a fare questo con AddFontMemResourceEx, ma non sembrano avere problemi con come può essere visto in stackoverflow.com/questions/50964801/…
    • So che è stato un po’, ma ho avuto la stessa domanda. Si può ottenere il #names effettuando le seguenti operazioni: fare clic con il tipo di carattere in Windows explorer. Andare su Proprietà -> Dettagli> Titolo.
    • La perdita di memoria ancora verificarsi quando si utilizza il secondo metodo di copia nella directory di output?
    • FYI che criptici #NotoSans identificatore non è guidato dal nome del file. È necessario fare doppio clic sul file di Windows che si apre la finestra di anteprima per il tipo di carattere. Ci sarà una etichetta che dice “nome del Font: NotoSans”, è che il nome del font che si desidera utilizzare quando si fa riferimento in WPF.
    • in VS2019 e dotnet core 3 che ho usato <FontFamily x:Key="FontAwesome">/MyResourceClassLib;component/Fonts/#Font Awesome 5 Free Solid</FontFamily> nel passaggio 6
    • Grazie mille per questa spiegazione!!!

  3. 16

    La risposta migliore a questa domanda ho trovato qui

    http://geekswithblogs.net/Martinez/archive/2010/01/29/custom-font-in-wpf-application.aspx

    SOLUZIONE
    Esso comporta l’uso di ancora più malvagi stringa di prima, ma funziona come previsto:

    <Label FontFamily="pack://application:,,,/Folder1/#Katana">Text</Label> 

    Dove è Folder1 è una cartella del vostro progetto, in cui si mantiene un file TTF.
    Tre note:

    1. ‘Katana’ è il nome del tipo di carattere, non il nome del file. Questa è una differenza significativa. Per ottenere il nome del tipo di carattere semplicemente doppio click sul file.

    2. Ricordatevi di mettere il segno di cancelletto ” # ” all’inizio del nome del tipo di carattere. Non funziona il contrario.

    3. Tipo di carattere personalizzato può anche essere aggiunto al progetto ‘Costruire l’Azione’ impostato su ‘Contenuto’. Questo non è raccomandato approccio, tuttavia, e per semplicità ho ignorato questa possibilità.

    Alcuni collegamenti aggiuntivi

    https://msdn.microsoft.com/en-us/library/ms753303(v=vs. 100).aspx

    https://msdn.microsoft.com/en-us/library/cc296385.aspx

    • Si può scegliere un file di tipo di carattere e di utilizzarlo?
    • Importante: “‘Katana’ è il nome del tipo di carattere, non il nome del file. Questa è una differenza significativa. Per ottenere il nome del tipo di carattere basta fare clic sul file due volte.”
    • Come fa a sapere che cosa il nome del file è però? Sicuramente il nome del file deve andare da qualche parte? Questa soluzione non funziona per me.
  4. 6

    Non ho trovato alcuna risposta per la stessa esatta.
    Ma ho trovato una soluzione che non ho visto su Internet.

    Ho seguito una raccomandazione di fare una cartella e la marcatura di tutti i file all’interno delle Risorse.
    Ma ho bisogno di enumerare, e questo era il mio problema principale, perché ho bisogno di caricare tutti per il mio schermo senza registrazione il nome da qualche parte. Voglio solo semplice caduta di un altro tipo di carattere nella cartella e l’elenco.

    Ho trovato questo come una soluzione per elencare tutti i file all’interno del mio risorse/cartella tipi di carattere

    Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))

    Mi aspettano per aiutarvi a organizzare il vostro font.

    • Si prega di aggiungere un link alla pagina di riferimento per questa API.
    • Può GetFontFamilies selezionare il tipo di carattere nella cartella altro?
    • Questo è stato estremamente utile.
  5. 4

    Io uso xaml per questo

    <Window
    
     FontFamily ="./Fonts/#somefont"
    
    >

    Ho incluso il file del tipo di carattere dentro la cartella “Fonts”

  6. 2

    Ho una cartella tipi di carattere all’interno di una cartella assets nel mio progetto. Al momento della compilazione sarà copiare i font nella cartella content. Quindi posso semplicemente utilizzare il seguente codice XAML per utilizzare il FontAwesome font avere un’icona sul pulsante.

    <Button Content="&#xf0c9;" FontFamily="./assets/fonts/#FontAwesome">
  7. 1

    Ecco che Cosa ha Funzionato per me:

    (1) Aggiungere la Directory del progetto: tipo di carattere

    (2) Spostare il file di font ttf nella directory carattere

    (3) Aggiungere file di font ttf a progetto

    (4) Impostare il “Build” di Proprietà del tff file del tipo di carattere “Risorsa”
    (Nota: ho usato “Risorsa” invece di “Embedded Resource”
    in combobox di selezione.)

    (5) Aprire la Finestra in cui si utilizza il tipo di carattere e rendere il
    seguenti modifiche:

    <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) Se si desidera modificare il tipo di carattere dal codice. Fare questo:

    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;
        }
    
        ...
    }
    • anche questo ha funzionato per me.
  8. 0

    Stavo cercando di farlo funzionare, e con un carattere diverso,
    non solo ha lavorato per me in questo formato con il ./Font

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

  9. 0

    Prima) caratteri di Copia di cartella di progetto come /Resources/Fonts/ e impostare le proprietà del font -> Azione di compilazione:la Risorsa

    Secondo) Usato codice

    FontFamily="/AssemblyNamespace;component/Resources/Fonts/IranSans/#IRANSansWeb Medium"

    Come includere i font esterno in applicazione WPF senza installarlo

  10. 0

    È necessario aggiungi tipi di carattere come elemento risorsa

    secondo il link; si può aggiungere il vostro tipo di carattere desiderato come applicazione file di risorse, attenendosi alla seguente procedura:

    1. copiare i file del tipo di carattere a qualsiasi punto del progetto nella maggior parte dei casi i file di risorse viene copiato in una cartella denominata “risorse” e se si vuole fare questo, creare una nuova cartella nel vostro progetto e il nome come “risorse”, quindi copiare i file del tipo di carattere che di solito hanno ttf o otf formato in che cartella

    2. allora avete bisogno di dichiarare il file come un file di risorse per farlo hai due opzioni:

      1. fare clic destro sul file del tipo di carattere, selezionare proprietà (o premere il tasto F4, previa selezione)
        e quindi modificare “Costruiamo l’Azione” per “Risorsa”
      2. andare nella directory di progetti di modifica project-name.csproj file e il
        il seguente tag:

        <ItemGroup>            
            <Resource Include="resources\<font-file-name>.ttf" />  
        </ItemGroup>```

    infine nell’applicazione è possibile impostare la proprietà font-family come questo:

    FontFamily="./Resources/Fonts/#<font-name>"

    essere attento “font-name’ è diversi dal font-nome-file, è possibile aprire file di tipo di carattere e di controllo per la proprietà nome font (in Microsoft windows)

    Come includere i font esterno in applicazione WPF senza installarlo

  11. 0

    Il modo più semplice per includere i caratteri esterni è

    Passo 1. Creare la cartella Fonts E aggiungere i font in esso.

    Come includere i font esterno in applicazione WPF senza installarlo

    Passo 2. Set di Costruire l’azione di content e Copia nella Directory di Output per Copy always.

    Come includere i font esterno in applicazione WPF senza installarlo

    Passo 3. Costruire la Soluzione di aggiornarlo con la directory dei Font.

    Passo 4. Utilizzare il tipo di carattere nella vostra utilizzando elementi FontFamily="Fonts/#font name"

    Come includere i font esterno in applicazione WPF senza installarlo

    Tutto Fatto!

    Grazie a cscience !

Lascia un commento