Uygulamalarla Yazı Tiplerini Paketleme

Bu konu başlığında, Windows Presentation Foundation (WPF) uygulamanızla yazı tiplerini paketlemeye yönelik bir genel bakış sağlanır.

Dekont

Çoğu yazılım türünde olduğu gibi, yazı tipi dosyaları satılmak yerine lisanslandırılır. Yazı tiplerinin kullanımını yöneten lisanslar satıcıdan satıcıya farklılık gösterir, ancak Microsoft'un uygulamalar ve Windows ile sağladığı yazı tiplerini kapsayan lisanslar da dahil olmak üzere genel olarak çoğu lisansta yazı tiplerinin uygulamalara eklenmesine veya başka bir şekilde yeniden dağıtılmasına izin vermez. Bu nedenle, bir geliştirici olarak, bir uygulamaya eklediğiniz veya başka bir şekilde yeniden dağıttığınız herhangi bir yazı tipi için gerekli lisans haklarına sahip olduğunuzdan emin olmak sizin sorumluluğunuzdadır.

Paketleme Yazı Tiplerine Giriş

Kullanıcı arabirimi metnini ve diğer metin tabanlı içerik türlerini görüntülemek için yazı tiplerini WPF uygulamalarınızda kolayca kaynak olarak paketleyebilirsiniz. Yazı tipleri uygulamanın derleme dosyalarından ayrı olabilir veya içine eklenebilir. Ayrıca, uygulamanızın başvurabileceği yalnızca kaynak yazı tipi kitaplığı da oluşturabilirsiniz.

OpenType ve TrueType® yazı tipleri, yazı tipi için yazı tipi ekleme lisans haklarını gösteren bir tür bayrağı (fsType) içerir. Ancak, bu tür bayrağı yalnızca belgede depolanan eklenmiş yazı tiplerini ifade eder; bir uygulamada katıştırılmış yazı tiplerine başvurmaz. Bir nesne oluşturup GlyphTypeface özelliğine başvurarak EmbeddingRights bir yazı tipi için yazı tipi ekleme haklarını alabilirsiniz. fsType bayrağı hakkında daha fazla bilgi için OpenType Belirtimi'nin "OS/2 ve Windows Ölçümleri" bölümüne bakın.

Microsoft Tipografi Web sitesi, belirli bir yazı tipi satıcısını bulmanıza veya özel çalışma için yazı tipi satıcısı bulmanıza yardımcı olabilecek iletişim bilgileri içerir.

İçerik Öğeleri Olarak Yazı Tipleri Ekleme

Uygulamanıza, uygulamanın derleme dosyalarından ayrı proje içerik öğeleri olarak yazı tipleri ekleyebilirsiniz. Bu, içerik öğelerinin bir derlemeye kaynak olarak eklenmediği anlamına gelir. Aşağıdaki proje dosyası örneğinde içerik öğelerinin nasıl tanımlanacağı gösterilmektedir.

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

Uygulamanın çalışma zamanında yazı tiplerini kullanabilmesini sağlamak için yazı tiplerine uygulamanın dağıtım dizininden erişilebilir olması gerekir. Uygulamanın <CopyToOutputDirectory> proje dosyasındaki öğesi, derleme işlemi sırasında yazı tiplerini otomatik olarak uygulama dağıtım dizinine kopyalamanıza olanak tanır. Aşağıdaki proje dosyası örneği, yazı tiplerinin dağıtım dizinine nasıl kopyalanacaklarını gösterir.

<ItemGroup>  
  <Content Include="Peric.ttf">  
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>  
  </Content>  
  <Content Include="Pericl.ttf">  
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>  
  </Content>  
</ItemGroup>  

Aşağıdaki kod örneğinde, uygulamanın yazı tipine içerik öğesi olarak nasıl başvurılacağı gösterilmektedir; başvuruda bulunılan içerik öğesi, uygulamanın derleme dosyalarıyla aynı dizinde olmalıdır.

<TextBlock FontFamily="./#Pericles Light">
  Aegean Sea
</TextBlock>

Kaynak Öğeleri Olarak Yazı Tipleri Ekleme

Uygulamanıza yazı tiplerini, uygulamanın derleme dosyalarına eklenmiş proje kaynak öğeleri olarak ekleyebilirsiniz. Kaynaklar için ayrı bir alt dizin kullanmak, uygulamanın proje dosyalarını düzenlemeye yardımcı olur. Aşağıdaki proje dosyası örneği, yazı tiplerinin ayrı bir alt dizinde kaynak öğeleri olarak nasıl tanımlanacağı gösterilmektedir.

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

Dekont

Yazı tiplerini uygulamanıza kaynak olarak eklediğinizde, uygulamanızın proje dosyasındaki öğeyi <Resource> değil öğesini ayarladığınızdan <EmbeddedResource> emin olun. <EmbeddedResource> Derleme eyleminin öğesi desteklenmez.

Aşağıdaki işaretleme örneği, uygulamanın yazı tipi kaynaklarına nasıl başvuracaklarını gösterir.

<TextBlock FontFamily="./resources/#Pericles Light">
  Aegean Sea
</TextBlock>

Koddan Yazı Tipi Kaynak Öğelerine Başvurma

Koddan yazı tipi kaynak öğelerine başvurmak için iki parçalı yazı tipi kaynak başvurusu sağlamanız gerekir: temel tekdüzen kaynak tanımlayıcısı (URI); ve yazı tipi konumu başvurusu. Bu değerler yöntemi için FontFamily parametre olarak kullanılır. Aşağıdaki kod örneği, adlı resourcesproje alt dizininde uygulamanın yazı tipi kaynaklarına nasıl başvuracaklarını gösterir.

// 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")

Temel tekdüzen kaynak tanımlayıcısı (URI), yazı tipi kaynağının bulunduğu uygulama alt dizinini içerebilir. Bu durumda, yazı tipi konumu başvurusunun bir dizin belirtmesi gerekmez, ancak yazı tipi kaynağının temel tekdüzen kaynak tanımlayıcısı (URI) tarafından belirtilen dizinde olduğunu gösteren baştaki bir "./" içermesi gerekir. Aşağıdaki kod örneği, yazı tipi kaynak öğesine başvurmanın alternatif bir yolunu gösterir; bu, önceki kod örneğine eşdeğerdir.

// 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")

Aynı Uygulama Alt Dizininden Yazı Tiplerine Başvurma

Hem uygulama içeriğini hem de kaynak dosyalarını uygulama projenizin kullanıcı tanımlı alt dizinine yerleştirebilirsiniz. Aşağıdaki proje dosyası örneği, aynı alt dizinde tanımlanan içerik sayfasını ve yazı tipi kaynaklarını gösterir.

<ItemGroup>  
  <Page Include="pages\HomePage.xaml" />  
</ItemGroup>  
<ItemGroup>  
  <Resource Include="pages\Peric.ttf" />  
  <Resource Include="pages\Pericl.ttf" />  
</ItemGroup>  

Uygulama içeriği ve yazı tipi aynı alt dizinde olduğundan, yazı tipi başvurusu uygulama içeriğine göredir. Aşağıdaki örneklerde, yazı tipi uygulamayla aynı dizinde olduğunda uygulamanın yazı tipi kaynağına nasıl başvuracakları gösterilmektedir.

<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")

Uygulamada Yazı Tiplerini Numaralandırma

Yazı tiplerini uygulamanızda kaynak öğeleri olarak numaralandırmak için veya GetTypefaces yöntemini kullanınGetFontFamilies. Aşağıdaki örnekte, uygulama yazı tipi konumundan GetFontFamilies nesne koleksiyonunu döndürmek için yönteminin nasıl kullanılacağı gösterilmektedir FontFamily . Bu durumda, uygulama "resources" adlı bir alt dizin içerir.

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

Aşağıdaki örnekte, uygulama yazı tipi konumundan GetTypefaces nesne koleksiyonunu döndürmek için yönteminin nasıl kullanılacağı gösterilmektedir Typeface . Bu durumda, uygulama "resources" adlı bir alt dizin içerir.

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

Yazı Tipi Kaynak Kitaplığı Oluşturma

Yalnızca yazı tiplerini içeren yalnızca kaynak kitaplığı oluşturabilirsiniz; hiçbir kod bu tür bir kitaplık projesinin parçası değildir. Yalnızca kaynak kitaplığı oluşturmak, kaynakları bunları kullanan uygulama kodundan ayırmaya yönelik yaygın bir tekniktir. Bu, kitaplık derlemesinin birden çok uygulama projesine dahil edilmesini de sağlar. Aşağıdaki proje dosyası örneği, yalnızca kaynak kitaplık projesinin önemli bölümlerini gösterir.

<PropertyGroup>  
  <AssemblyName>FontLibrary</AssemblyName>  
  <OutputType>library</OutputType>  
  ...  
</PropertyGroup>  
...
<ItemGroup>  
  <Resource Include="Kooten.ttf" />  
  <Resource Include="Pesca.ttf" />  
</ItemGroup  

Kaynak Kitaplığında Yazı Tipine Başvurma

Uygulamanızdan kaynak kitaplığındaki bir yazı tipine başvurmak için, yazı tipi başvurusuna kitaplık derlemesinin adını eklemelisiniz. Bu durumda, yazı tipi kaynak derlemesi "FontLibrary" şeklindedir. Derleme adını derleme içindeki başvurudan ayırmak için bir ';' karakteri kullanın. "Bileşen" anahtar sözcüğünü ve ardından yazı tipi adına yapılan başvuruyu eklemek, yazı tipi kitaplığının kaynağına tam başvuruyu tamamlar. Aşağıdaki kod örneği, kaynak kitaplığı derlemesindeki bir yazı tipine nasıl başvuracaklarını gösterir.

<Run FontFamily="/FontLibrary;Component/#Kootenay" FontSize="36">
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
</Run>

Dekont

Bu SDK, WPF uygulamalarıyla kullanabileceğiniz bir dizi örnek OpenType yazı tipi içerir. Yazı tipleri yalnızca kaynak kitaplığında tanımlanır. Daha fazla bilgi için bkz . Örnek OpenType Yazı Tipi Paketi.

Yazı Tipi Kullanımıyla İlgili Sınırlamalar

Aşağıdaki listede WPF uygulamalarında yazı tiplerinin paketlenmesi ve kullanımıyla ilgili çeşitli sınırlamalar açıklanmaktadır:

  • Yazı tipi ekleme izin bitleri: WPF uygulamaları hiçbir yazı tipi ekleme izin bitlerini denetlemez veya zorlamaz. Daha fazla bilgi için Introduction_to_Packing Yazı Tipleri bölümüne bakın.

  • Kaynak yazı tipleri sitesi: WPF uygulamaları http veya ftp tekdüzen kaynak tanımlayıcısına (URI) yazı tipi başvurusuna izin vermez.

  • Pack: gösterimini kullanan mutlak URI: WPF uygulamaları, bir yazı tipine yapılan mutlak tekdüzen kaynak tanımlayıcısı (URI) başvurusunun bir FontFamily parçası olarak "pack:" kullanarak program aracılığıyla nesne oluşturmanıza izin vermez. Örneğin, "pack://application:,,,/resources/#Pericles Light" geçersiz bir yazı tipi başvurusudur.

  • Otomatik yazı tipi ekleme: Tasarım sırasında, bir uygulamanın yazı tipi kullanımını arama ve yazı tiplerini uygulamanın kaynaklarına otomatik olarak ekleme desteği yoktur.

  • Yazı tipi alt kümeleri: WPF uygulamaları, sabit olmayan belgeler için yazı tipi alt kümelerinin oluşturulmasını desteklemez.

  • Yanlış başvuru olduğu durumlarda, uygulama kullanılabilir bir yazı tipi kullanmaya geri döner.

Ayrıca bkz.