Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Thema enthält eine Übersicht über das Verpacken von Schriftarten mit Ihrer Windows Presentation Foundation (WPF)-Anwendung.
Hinweis
Wie bei den meisten Arten von Software werden Schriftartdateien lizenziert, anstatt verkauft. Lizenzen, die die Verwendung von Schriftarten steuern, variieren von Anbieter zu Anbieter. Im Allgemeinen erlauben die meisten Lizenzen, einschließlich jener für die von Microsoft mit Anwendungen und Windows bereitgestellten Schriftarten, nicht, dass die Schriftarten in Anwendungen integriert oder anderweitig weiterverteilt werden. Daher liegt es als Entwickler in Ihrer Verantwortung, sicherzustellen, dass Sie über die erforderlichen Lizenzrechte für jede Schriftart verfügen, die Sie in eine Anwendung einbetten oder anderweitig weitervertreiben.
Einführung in das Packen von Schriftarten
Sie können Schriftarten ganz einfach als Ressourcen in Ihren WPF-Anwendungen verpacken, um Benutzeroberflächentext und andere Arten von textbasiertem Inhalt anzuzeigen. Die Schriftarten können von den Assemblydateien der Anwendung getrennt oder eingebettet werden. Sie können auch eine ressourcengeschützte Schriftartbibliothek erstellen, auf die Ihre Anwendung verweisen kann.
OpenType- und TrueType®-Schriftarten enthalten das Typflag „FsType“, das die Lizenzierungsrechte für die Schriftarteinbettung angibt. Diese Typkennzeichnung bezieht sich jedoch nur auf eingebettete Schriftarten, die in einem Dokument gespeichert sind– sie verweist nicht auf Schriftarten, die in einer Anwendung eingebettet sind. Sie können die Schriftarteinbettungsrechte für eine Schriftart abrufen, indem Sie ein GlyphTypeface-Objekt erstellen und auf seine EmbeddingRights-Eigenschaft verweisen. Weitere Informationen zum fsType-Flag finden Sie im Abschnitt „OS/2 und Windows-Metriken“ in der OpenType-Spezifikation.
Die Microsoft Typography-Website enthält Kontaktinformationen, die Ihnen beim Auffinden eines bestimmten Schriftartanbieters oder beim Suchen eines Schriftartanbieters für benutzerdefinierte Arbeit helfen können.
Hinzufügen von Schriftarten als Inhaltselemente
Sie können Ihrer Anwendung Schriftarten als Projektinhaltselemente hinzufügen, die von den Assemblydateien der Anwendung getrennt sind. Dies bedeutet, dass Inhaltselemente nicht als Ressourcen in einer Assembly eingebettet werden. Das folgende Projektdateibeispiel zeigt, wie Inhaltselemente definiert werden.
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Other project build settings ... -->
<ItemGroup>
<Content Include="Peric.ttf" />
<Content Include="Pericl.ttf" />
</ItemGroup>
</Project>
Um sicherzustellen, dass die Anwendung die Schriftarten zur Laufzeit verwenden kann, müssen die Schriftarten im Bereitstellungsverzeichnis der Anwendung zugänglich sein. Mit dem <CopyToOutputDirectory>
-Element in der Projektdatei der Anwendung können Sie die Schriftarten während des Buildvorgangs automatisch in das Anwendungsbereitstellungsverzeichnis kopieren. Das folgende Projektdateibeispiel zeigt, wie Schriftarten in das Bereitstellungsverzeichnis kopiert werden.
<ItemGroup>
<Content Include="Peric.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Pericl.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Das folgende Codebeispiel zeigt, wie auf die Schriftart der Anwendung als Inhaltselement verwiesen wird. Das referenzierte Inhaltselement muss sich im selben Verzeichnis wie die Assemblydateien der Anwendung befinden.
<TextBlock FontFamily="./#Pericles Light">
Aegean Sea
</TextBlock>
Hinzufügen von Schriftarten als Ressourcenelemente
Sie können Ihrer Anwendung Schriftarten als Projektressourcenelemente hinzufügen, die in die Assemblydateien der Anwendung eingebettet sind. Die Verwendung eines separaten Unterverzeichnisses für Ressourcen hilft beim Organisieren der Projektdateien der Anwendung. Das folgende Projektdateibeispiel zeigt, wie Schriftarten als Ressourcenelemente in einem separaten Unterverzeichnis definiert werden.
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Other project build settings ... -->
<ItemGroup>
<Resource Include="resources\Peric.ttf" />
<Resource Include="resources\Pericl.ttf" />
</ItemGroup>
</Project>
Hinweis
Wenn Sie Ihrer Anwendung Schriftarten als Ressourcen hinzufügen, stellen Sie sicher, dass Sie das <Resource>
-Element und nicht das <EmbeddedResource>
-Element in der Projektdatei Ihrer Anwendung festlegen. Das <EmbeddedResource>
-Element für den Erstellungsvorgang wird nicht unterstützt.
Das folgende Markupbeispiel zeigt, wie auf die Schriftartressourcen der Anwendung verwiesen wird.
<TextBlock FontFamily="./resources/#Pericles Light">
Aegean Sea
</TextBlock>
Verweisen auf Schriftartenressourcenelemente aus dem Code
Zum Verweisen auf Schriftartenressourcenelemente aus dem Code müssen Sie einen zweiteiligen Schriftartenressourcenverweis bereitstellen: den grundlegenden Ressourcenbezeichner (URI) und den Verweis auf den Speicherort der Schriftarten. Diese Werte werden als Parameter für die FontFamily-Methode verwendet. Das folgende Codebeispiel zeigt, wie sie auf die Schriftartressourcen der Anwendung im Projektunterverzeichnis mit dem Namen resources
verweisen.
// The font resource reference includes the base URI reference (application directory level),
// and a relative URI reference.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./resources/#Pericles Light");
' The font resource reference includes the base URI reference (application directory level),
' and a relative URI reference.
myTextBlock.FontFamily = New FontFamily(New Uri("pack://application:,,,/"), "./resources/#Pericles Light")
Der Basis-Uniform Resource Identifier (URI) kann das Anwendungsunterverzeichnis enthalten, in dem sich die Schriftressource befindet. In diesem Fall müsste der Verweis auf den Speicherort der Schriftarten kein Verzeichnis angeben, sondern müsste ein vorangestelltes „./
“ enthalten, das angibt, dass sich die Schriftartenressource im selben Verzeichnis befindet, das vom grundlegenden Ressourcenbezeichner (URI) angegeben wird. Das folgende Codebeispiel zeigt eine alternative Methode zum Verweisen auf das Schriftartressourcenelement – es entspricht dem vorherigen Codebeispiel.
// The base URI reference can include an application subdirectory.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/resources/"), "./#Pericles Light");
' The base URI reference can include an application subdirectory.
myTextBlock.FontFamily = New FontFamily(New Uri("pack://application:,,,/resources/"), "./#Pericles Light")
Verweisen auf Schriftarten aus demselben Anwendungsunterverzeichnis
Sie können sowohl Anwendungsinhalte als auch Ressourcendateien im selben benutzerdefinierten Unterverzeichnis Ihres Anwendungsprojekts platzieren. Das folgende Projektdateibeispiel zeigt eine Inhaltsseite und Schriftartressourcen, die im selben Unterverzeichnis definiert sind.
<ItemGroup>
<Page Include="pages\HomePage.xaml" />
</ItemGroup>
<ItemGroup>
<Resource Include="pages\Peric.ttf" />
<Resource Include="pages\Pericl.ttf" />
</ItemGroup>
Da sich der Anwendungsinhalt und die Schriftart im selben Unterverzeichnis befinden, ist der Schriftverweis relativ zum Anwendungsinhalt. Die folgenden Beispiele zeigen, wie Sie auf die Schriftartressource der Anwendung verweisen, wenn sich die Schriftart im selben Verzeichnis wie die Anwendung befindet.
<TextBlock FontFamily="./#Pericles Light">
Aegean Sea
</TextBlock>
// The font resource reference includes the base Uri (application directory level),
// and the file resource location, which is relative to the base Uri.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "/pages/#Pericles Light");
' The font resource reference includes the base Uri (application directory level),
' and the file resource location, which is relative to the base Uri.
myTextBlock.FontFamily = New FontFamily(New Uri("pack://application:,,,/"), "/pages/#Pericles Light")
Aufzählen von Schriftarten in einer Anwendung
Wenn Sie Schriftarten als Ressourcenelemente in Ihrer Anwendung aufzählen möchten, verwenden Sie entweder die GetFontFamilies- oder GetTypefaces Methode. Das folgende Beispiel zeigt, wie die Sammlung von GetFontFamilies-Objekten mithilfe der FontFamily-Methode aus dem Schriftartenspeicherort der Anwendung zurückgegeben wird. In diesem Fall enthält die Anwendung ein Unterverzeichnis mit dem Namen "resources".
foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new Uri("pack://application:,,,/"), "./resources/"))
{
// Perform action.
}
For Each fontFamily As FontFamily In Fonts.GetFontFamilies(New Uri("pack://application:,,,/"), "./resources/")
' Perform action.
Next fontFamily
Das folgende Beispiel zeigt, wie die Sammlung von GetTypefaces-Objekten mithilfe der Typeface-Methode aus dem Schriftartenspeicherort der Anwendung zurückgegeben wird. In diesem Fall enthält die Anwendung ein Unterverzeichnis mit dem Namen "resources".
foreach (Typeface typeface in Fonts.GetTypefaces(new Uri("pack://application:,,,/"), "./resources/"))
{
// Perform action.
}
For Each typeface As Typeface In Fonts.GetTypefaces(New Uri("pack://application:,,,/"), "./resources/")
' Perform action.
Next typeface
Erstellen einer Schriftartenbibliothek
Sie können eine nur Ressourcenbibliothek erstellen, die nur Schriftarten enthält– kein Code ist Teil dieses Bibliotheksprojekttyps. Das Erstellen einer Ressourcenbibliothek ist eine gängige Technik zum Entkoppeln von Ressourcen vom Anwendungscode, der sie nutzt. Dadurch kann die Bibliotheksassembly auch in mehrere Anwendungsprojekte einbezogen werden. In der folgenden Beispielprojektdatei werden die Hauptbestandteile einer Bibliothek nur für Ressourcen gezeigt.
<PropertyGroup>
<AssemblyName>FontLibrary</AssemblyName>
<OutputType>library</OutputType>
...
</PropertyGroup>
...
<ItemGroup>
<Resource Include="Kooten.ttf" />
<Resource Include="Pesca.ttf" />
</ItemGroup
Verweisen auf eine Schriftart in einer Ressourcenbibliothek
Um in Ihrer Anwendung auf eine Schriftart in einer Ressourcenbibliothek zu verweisen, müssen Sie dem Schriftverweis den Namen des Bibliotheksmoduls voranstellen. In diesem Fall ist die Schriftartenressourcenassembly „FontLibrary“. Verwenden Sie ein Semikolon (;), um den Assemblynamen vom Verweis innerhalb der Assembly zu trennen. Durch Hinzufügen des Schlüsselworts „Component“ gefolgt vom Verweis auf den Namen der Schriftart wird der Verweis auf die Ressource der Schriftartenbibliothek vervollständigt. Im folgenden Codebeispiel wird veranschaulicht, wie auf eine Schriftart in einer Ressourcenbibliotheksassembly verwiesen wird.
<Run FontFamily="/FontLibrary;Component/#Kootenay" FontSize="36">
ABCDEFGHIJKLMNOPQRSTUVWXYZ
</Run>
Hinweis
Dieses SDK enthält eine Reihe von OpenType-Beispielschriftarten, die Sie mit WPF-Anwendungen verwenden können. Die Schriftarten werden in einer ressourcenbasierten Bibliothek definiert. Weitere Informationen finden Sie unter OpenType-Beispielschriftartenpaket.
Einschränkungen bei der Schriftnutzung
Die folgende Liste beschreibt mehrere Einschränkungen beim Verpacken und Verwenden von Schriftarten in WPF-Anwendungen:
Berechtigungsbits für die Schriftarteneinbettung: In WPF-Anwendungen werden keine Berechtigungsbits für die Schriftarteneinbettung überprüft oder durchgesetzt. Weitere Informationen finden Sie im Abschnitt Einführung in das Packen von Schriftarten.
Ursprungsort der Schriftarten: WPF-Anwendungen lassen keinen Schriftartverweis auf einen http- oder ftp-URI (Uniform Resource Identifier) zu.
Absoluter URI mit „pack:“-Notation: Es ist nicht möglich, in WPF-Anwendungen programmgesteuert ein FontFamily-Objekt zu erstellen, indem Sie „pack:“ im absoluten Verweis auf den URI einer Schriftart verwenden. Beispielsweise ist
"pack://application:,,,/resources/#Pericles Light"
ein ungültiger Schriftartverweis.Automatische Schriftarteinbettung: Während der Entwurfsphase gibt es keine Unterstützung beim Durchsuchen der Schriftartverwendung in einer Anwendung und dem automatischen Einbetten der Schriftarten in die Anwendungsressourcen.
Schriftartteile: WPF-Anwendungen unterstützen keine Erstellung von Schriftartteilen für Dokumente ohne festes Format.
In Fällen, in denen ein falscher Verweis vorhanden ist, greift die Anwendung auf die Verwendung einer verfügbaren Schriftart zurück.
Siehe auch
.NET Desktop feedback