it-swarm.com.de

So fügen Sie eine externe Schriftart in die WPF-Anwendung ein, ohne sie zu installieren

So fügen Sie eine externe Schriftart in die WPF-Anwendung ein, ohne sie zu installieren

Ich habe diesen Code ausprobiert 

  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;

Es funktioniert ordnungsgemäß in Windows Form Application, aber nicht in WPF.

37
Shebin

Ich verwende diesen XAML-Code:

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

#HATTEN - Verweis auf hatten.tft in Resources.

Verwenden des Stils:

 <TextBlock x:Name="lblTitle" Style="{DynamicResource Hatten}" FontSize="72"></TextBlock>
20
Pavel

Dies sind zwei Möglichkeiten, dies zu tun. Eine Möglichkeit besteht darin, die Schriftarten in der Anwendung zu packen. Die andere Möglichkeit besteht darin, dass die Zeichensätze den Ausgabeordner separat haben. Der Unterschied besteht hauptsächlich im URI, den Sie zum Laden der Dateien benötigen. 

Paket mit der Anwendung

  1. Fügen Sie Ihrer Lösung einen /Fonts-Ordner hinzu. 
  2. Fügen Sie diesem Ordner die True Type Fonts-Dateien (*.ttf) hinzu 
  3. Fügen Sie die Dateien in das Projekt ein
  4. Wählen Sie die Schriftarten aus und fügen Sie sie der Lösung hinzu
  5. Stellen Sie BuildAction: Resource und Copy To Output Directory: Do not copy ein. Ihre .csproj-Datei sollte jetzt einen Abschnitt wie diesen haben: 

     <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 füge <FontFamily> Ressourcen hinzu. Es sollte im folgenden Codebeispiel aussehen. Beachten Sie, dass der URI beim Packen mit der Anwendung nicht den Dateinamen enthält. 

    <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. Wenden Sie Ihre Schriftarten wie folgt an: 

    <TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}" 
               FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
    
  8. Sie können die Schriftart auch zwingend festlegen: 

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

In Ausgabeverzeichnis kopieren

  1. Fügen Sie Ihrer Lösung einen /Fonts-Ordner hinzu. 
  2. Fügen Sie der Reihenfolge die True Type Fonts-Dateien (*.ttf) hinzu 
  3. Fügen Sie die Dateien in das Projekt ein
  4. Wählen Sie die Schriftarten aus und fügen Sie sie der Lösung hinzu
  5. Stellen Sie BuildAction: Content und Copy To Output Directory: Copy if newer ein. Ihre .csproj-Datei sollte jetzt einen Abschnitt wie diesen haben: 

     <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 füge <FontFamily> Ressourcen hinzu. Es sollte im folgenden Codebeispiel aussehen. Beachten Sie, dass der URI beim Packen mit der Anwendung nicht den Dateinamen enthält. 

    <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. Wenden Sie Ihre Schriftarten wie folgt an: 

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

Verweise

74
MovGP0

Die beste Antwort auf diese Frage habe ich hier gefunden 

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

SOLUTION Dies beinhaltet die Verwendung einer noch bösartigeren Zeichenfolge als zuvor, die jedoch wie erwartet funktioniert: 

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

Where is Folder1 ist ein Ordner Ihres Projekts, in dem Sie eine TTF-Datei aufbewahren. __ Drei Anmerkungen am Ende:

  1. "Katana" ist der Name der Schrift, nicht der Name der Datei. Das ist ein wesentlicher Unterschied. Um den Namen der Schrift zu erhalten, klicken Sie einfach zweimal auf die Datei.

  2. Denken Sie daran, das Hash-Zeichen "#" vor den Namen der Schriftart zu setzen. Es wird sonst nicht funktionieren.

  3. Benutzerdefinierte Schriftarten können dem Projekt auch hinzugefügt werden, wenn „Build Action“ auf „Content“ eingestellt ist. Dies ist jedoch kein empfohlener Ansatz, und der Einfachheit halber habe ich diese Möglichkeit ignoriert. 

Einige zusätzliche Links 

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

https://msdn.Microsoft.com/de-de/library/cc296385.aspx

14

Ich habe keine Antwort für genau das gefunden ... Aber ich habe eine Lösung gefunden, die ich im Internet nicht gesehen habe.

Ich folgte der Empfehlung, einen Ordner zu erstellen und alle darin enthaltenen Dateien als Ressourcen zu markieren .. Aber ich musste sie auflisten, und das war mein Hauptproblem, da ich alle auf meinen Bildschirm laden muss, ohne den Namen irgendwo aufzuzeichnen. Ich möchte einfach eine andere Schrift in diesen Ordner ziehen und auflisten.

Ich habe dies als Lösung gefunden, um alle Dateien in meinem Ressourcen/Fonts-Ordner aufzulisten

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

Ich erwarte, dass es Ihnen beim Organisieren Ihrer Schriftarten hilft.

Ich benutze dafür xaml

<Window

 FontFamily ="./Fonts/#somefont"

>

Ich habe die Fontdatei in den Ordner "Fonts" eingefügt

4
Tharu

Ich habe einen Zeichensatzordner in einem Assets-Ordner in meinem Projekt. Zum Erstellungszeitpunkt werden diese Schriftarten als Inhalt in den Ordner kopiert. Dann kann ich einfach die folgende XAML verwenden, um die FontAwesome-Schriftart zu verwenden, um ein Symbol auf meiner Schaltfläche zu haben.

<Button Content="&#xf0c9;" FontFamily="./assets/fonts/#FontAwesome">
2
Steve Parish

Hier ist was für mich gearbeitet hat:

(1) Verzeichnis zum Projekt hinzufügen: Schriftart

(2) Verschieben Sie die TTF-Schriftartdatei in das Schriftartverzeichnis

(3) Fügen Sie dem Projekt die TTF-Schriftartdatei hinzu

(4) Setzen Sie die Eigenschaft "Build" der Tff-Schriftartdatei auf "Resource" (Hinweis: Ich habe "Resource" anstelle von "Embedded Resource" In der Combobox-Auswahl verwendet.)

(5) Öffnen Sie das Fenster, in dem Sie die Schrift verwenden, und erstellen Sie die folgende Änderungen:

<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) Wenn Sie die Schriftart vom Code ändern möchten. Mach das:

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;
    }

    ...
}
1
Bill Moore

Externe Schriften lassen sich am einfachsten mit einbinden

Schritt 1. Erstellen Sie den Ordner Fonts und fügen Sie Ihre Schriften hinzu.

enter image description here

Schritt 2. Setzen Sie Build action auf content und Copy to Output Directory auf Copy always.

enter image description here

Schritt 3. Erstellen Sie die Projektmappe, um sie mit dem Schriftartverzeichnis zu aktualisieren.

Schritt 4. Verwenden Sie die Schriftart in Ihren Elementen mit FontFamily="Fonts/#font name"

enter image description here

Alles erledigt!

Danke an cscience !

0
StudioX

Sie müssen Schriften als Ressourcenelement hinzufügen

nach dem link ; Sie können die gewünschte Schriftart als Anwendungsressourcendatei hinzufügen, indem Sie die folgenden Schritte ausführen:

  1. kopieren Sie Ihre Schriftartendatei an eine beliebige Stelle in Ihrem Projekt. In den meisten Fällen werden Ressourcendateien in einen Ordner mit dem Namen "resources" kopiert. Wenn Sie diesem Ordner folgen möchten, erstellen Sie einen neuen Ordner in Ihrem Projekt und nennen Sie ihn "resources". Kopieren Sie dann Ihre Schriftartendatei mit dem Namen "resources" in der Regel haben TTF oder OTF-Format in diesem Ordner

  2. dann müssen Sie diese Datei als Ressourcendatei deklarieren. Dazu haben Sie zwei Möglichkeiten:

    1. klicken Sie mit der rechten Maustaste auf Ihre Schriftartdatei, wählen Sie Eigenschaften aus (oder drücken Sie F4, nachdem Sie sie ausgewählt haben) und ändern Sie dann "Build Action" in "Resource"
    2. gehe in dein Projektverzeichnis edit project-name.csproj Datei und das folgende Tag:

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

schließlich können Sie in Ihrer Anwendung die Eigenschaft der Schriftfamilie wie folgt festlegen:

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

seien Sie vorsichtig, 'Schriftartenname' ist anders Von Schriftartendateiname aus können Sie die Schriftartendatei öffnen und nach der Eigenschaft für den Schriftartennamen suchen (in Microsoft Windows).

fetching font name by opening font file

0
danitiger33

Zuerst) Kopieren Sie die Schriftarten in den Projektordner wie /Resources/Fonts/ und legen Sie die Schriftarten-Eigenschaften fest -> Aktion erstellen: Ressource

Zweitens) Wird im Code verwendet 

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

 enter image description here

0

Ich habe versucht, dies auch mit einer anderen Schriftart zu erreichen, Es funktionierte für mich nur in diesem Format mit den ./Fonts 

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

0
Eric Unger