Uygulamalarla Yazı Tiplerini Paketleme

bu konuda, yazı tiplerinin Windows Presentation Foundation (WPF) uygulamanızla nasıl paketlenecek hakkında bir genel bakış sunulmaktadır.

Not

Çoğu yazılım türünde olduğu gibi, satılan değil, yazı tipi dosyaları lisanslanı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 ilgili yazı tiplerini kapsaanlar da dahil olmak üzere çoğu lisans, yazı tiplerinin uygulamalara katıştırılması veya yeniden dağıtılması için izin vermez. Bu nedenle, bir geliştirici olarak, bir uygulama içine eklediğiniz veya başka bir şekilde yeniden dağıtırabilmeniz gereken 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östermek için, yazı tiplerini WPF uygulamalarınızın içindeki kaynaklar olarak kolayca paketleyebilirsiniz. Yazı tipleri, uygulamanın derleme dosyalarından ayrı veya katıştırılmış olabilir. Ayrıca, uygulamanızın başvurbileceği yalnızca kaynak yazı tipi kitaplığı da oluşturabilirsiniz.

OpenType ve TrueType® yazı tiplerinde yazı tipi için, yazı tipi ekleme lisanslama haklarını belirten bir tür bayrağı vardır. Ancak, bu tür bayrağı yalnızca bir belgede depolanan katıştırılmış yazı tiplerine başvurur. bir uygulamaya katıştırılmış olan yazı tiplerine başvurmaz. Bir GlyphTypeface nesne oluşturarak ve özelliğine başvurarak bir yazı tipi için yazı tipi ekleme haklarını alabilirsiniz EmbeddingRights . fstype bayrağı hakkında daha fazla bilgi için OpenType belirtiminin "OS/2 ve Windows ölçümleri" bölümüne bakın.

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

Yazı tiplerini Içerik öğeleri olarak ekleme

Uygulamanıza, uygulamanın derleme dosyalarından ayrı proje içerik öğeleri olarak yazı tipi ekleyebilirsiniz. Bu, içerik öğelerinin bir bütünleştirilmiş kod içinde kaynak olarak katıştırılmayacağı anlamına gelir. Aşağıdaki proje dosyası örneği, içerik öğelerinin nasıl tanımlanacağını gösterir.

<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 kullanabilmesi için, yazı tiplerinin uygulamanın dağıtım dizininde erişilebilir olması gerekir. <CopyToOutputDirectory>Uygulamanın proje dosyasındaki öğesi, derleme işlemi sırasında yazı tiplerini uygulama dağıtım dizinine otomatik olarak kopyalamanızı sağlar. Aşağıdaki proje dosyası örneği, yazı tiplerinin dağıtım dizinine nasıl kopyalanacağı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ği, uygulamanın yazı tipine içerik öğesi olarak nasıl başvurulacağını gösterir — başvurulan içerik öğesi, uygulamanın derleme dosyalarıyla aynı dizinde olmalıdır.

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

Yazı tiplerini kaynak öğe olarak ekleme

Uygulamanıza, uygulamanın derleme dosyaları içine katıştırılmış proje kaynak öğeleri olarak yazı tipi ekleyebilirsiniz. Kaynaklar için ayrı bir alt dizin kullanılması, uygulamanın proje dosyalarını düzenlemenize yardımcı olur. Aşağıdaki proje dosyası örneği, yazı tiplerinin ayrı bir alt dizinde kaynak öğe olarak nasıl tanımlanacağını gösterir.

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

Not

Uygulamanıza kaynak olarak yazı tipi eklediğinizde, <Resource> uygulamanızın proje dosyasındaki öğesini değil, öğesini ayarladığınızdan emin olun <EmbeddedResource> . <EmbeddedResource>Derleme eyleminin öğesi desteklenmiyor.

Aşağıdaki biçimlendirme örneği, uygulamanın yazı tipi kaynaklarına nasıl başvurulacağı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 bölümlü bir 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 parametreler olarak kullanılır FontFamily . Aşağıdaki kod örneği, adlı proje alt dizinindeki uygulamanın yazı tipi kaynaklarına nasıl başvurulacağını gösterir resources .

// 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 belirten önünde bir "" içermesi gerekir. Aşağıdaki kod örneği, yazı tipi kaynak öğesine başvurmak için alternatif bir yol gösterir; ö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ı aynı alt dizinine yerleştirebilirsiniz. Aşağıdaki proje dosyası örneği, aynı alt dizinde tanımlanan bir içerik sayfası 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öre değişir. Aşağıdaki örneklerde, yazı tipi uygulamayla aynı dizinde olduğunda uygulamanın yazı tipi kaynağına nasıl başvurulacağını 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")

Bir uygulamadaki yazı tiplerini numaralandırma

Yazı tiplerini uygulamanızdaki kaynak öğeleri olarak numaralandırmak için GetFontFamilies ya da GetTypefaces yöntemini kullanın. Aşağıdaki örnek, GetFontFamiliesFontFamily uygulama yazı tipi konumundan nesne koleksiyonunu döndürmek için yönteminin nasıl kullanılacağını gösterir. 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 örnek, GetTypefacesTypeface uygulama yazı tipi konumundan nesne koleksiyonunu döndürmek için yönteminin nasıl kullanılacağını gösterir. 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 — kod, bu tür kitaplık projesi parçası değildir. Yalnızca kaynak kitaplığı oluşturma, kaynakları kullanan uygulama kodundan ayrılmış kaynaklar için ortak bir tekniktir. Bu Ayrıca, kitaplık derlemesinin birden çok uygulama projesine dahil edilmesini sağlar. Aşağıdaki proje dosyası örneği, kaynak kitaplığı projesinin önemli kısımlarını gösterir.

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

Kaynak kitaplığındaki bir yazı tipine başvurma

Uygulamanızdan bir kaynak kitaplığındaki bir yazı tipine başvurmak için, yazı tipi başvurusunu kitaplık derlemesinin adı ile önekle uygulamanız gerekir. Bu durumda, yazı tipi kaynak derlemesi "FontLibrary" dir. Derleme adını derleme içindeki başvurudan ayırmak için '; ' karakterini kullanın. "Component" anahtar sözcüğünü ve ardından yazı tipi adının başvurusunu eklemek, yazı tipi kitaplığının kaynağına tam başvuruyu tamamlar. Aşağıdaki kod örneği, bir kaynak kitaplığı derlemesinde bir yazı tipine nasıl başvurulacağını gösterir.

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

Not

Bu SDK, WPF uygulamalarıyla kullanabileceğiniz örnek bir OpenType yazı tipi kümesi içerir. Yazı tipleri yalnızca kaynak kitaplığında tanımlanmıştır. Daha fazla bilgi için bkz. örnek OpenType yazı tipi paketi.

Yazı tipi kullanımı 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 katıştırma izin bitleri: WPF uygulamaları herhangi bir yazı tipi ekleme izni bitini denetlemez veya zorlamaz. Daha fazla bilgi için Introduction_to_Packing Fonts bölümüne bakın.

  • Kaynak yazı tiplerinin sitesi: WPF uygulamaları, http veya FTP Tekdüzen Kaynak tanımlayıcısı (URI) için yazı tipi başvurusuna izin vermez.

  • Paketi kullanan mutlak URI: Gösterim: WPF uygulamaları , bir yazı tipine mutlak Tekdüzen Kaynak tanımlayıcısı (URI) başvurusunun bir parçası olarak "Pack:" kullanarak bir 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 zamanı sırasında uygulamanın yazı tipi kullanımını arama ve yazı tiplerini uygulamanın kaynaklarına otomatik olarak katıştırma 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ış bir başvuru olduğu durumlarda, uygulama kullanılabilir bir yazı tipi kullanmaya geri döner.

Ayrıca bkz.