public ref class FontFamily
[System.ComponentModel.TypeConverter(typeof(System.Windows.Media.FontFamilyConverter))]
[System.Windows.Localizability(System.Windows.LocalizationCategory.Font)]
public class FontFamily
[<System.ComponentModel.TypeConverter(typeof(System.Windows.Media.FontFamilyConverter))>]
[<System.Windows.Localizability(System.Windows.LocalizationCategory.Font)>]
type FontFamily = class
Public Class FontFamily
FontFamily 属于“时代新罗马”字体系列成员的字样示例

大多数用户界面 (UI) 元素,例如 Button FontFamily 并提供 TextBlock 可用于为控件的文本内容指定字体的属性。 通过设置具有 FontFamily 值的该属性来定义字体。 以下示例演示如何在可扩展应用程序标记语言 (XAML) 和代码中引用字体。

myTextBlock.FontFamily = new FontFamily("Comic Sans MS"); myTextBlock.FontFamily = New FontFamily("Comic Sans MS") <TextBlock FontFamily="Comic Sans MS">Hello, world</TextBlock>

在前面的示例中,引用的字体“Comic Sans MS”由其 友好名称 引用。 此外,在此示例中,假定字体位于系统字体集合中。

在备用目录中指定字体

Windows Presentation Foundation (WPF) 应用程序可以指定一个目录,而不是包含系统字体集合的目录,用于解析字体引用。 字体的友好名称可以指定绝对统一的资源标识符 (URI) 值来解析字体引用,如以下可扩展应用程序标记语言 (XAML) 和代码示例所示。

// Create a new FontFamily object, using an absolute URI reference. myTextBlock.FontFamily = new FontFamily("file:///d:/MyFonts/#Pericles Light"); ' Create a new FontFamily object, using an absolute URI reference. myTextBlock.FontFamily = New FontFamily("file:///d:/MyFonts/#Pericles Light") <TextBlock FontFamily="file:///d:/MyFonts/#Pericles Light"> Aegean Sea </TextBlock>

字体的友好名称还可以指定相对 URI 值,这需要基 URI 来解析字体引用。 对象的 BaseUri 属性 FontFamily 对应于基 URI 值。 下面的代码示例演示如何创建由基 URI 值和相对 URI 值组成的字体引用。

// Create a new FontFamily object, using a base URI reference and a relative URI reference. myTextBlock.FontFamily = new FontFamily(new Uri("file:///d:/MyFonts/"), "./#Pericles Light"); ' Create a new FontFamily object, using a base URI reference and a relative URI reference. myTextBlock.FontFamily = New FontFamily(New Uri("file:///d:/MyFonts/"), "./#Pericles Light")

引用作为应用程序的一部分打包的字体时,可以使用基 URI 值。 例如,基 URI 值可以是“pack://application”URI,它允许引用打包为应用程序资源的字体。 下面的代码示例演示由基 URI 值和相对 URI 值组成的字体引用。

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

在标记中将 a FontFamily 指定为属性时,始终隐含基 URI 值 - 其值是 XAML 页的 URI。 隐含基 URI 值与友好名称字符串中的相对 URI 值一起使用,以获取字体的位置。 在以下可扩展应用程序标记语言 (XAML) 示例中,请注意相对 URI 值使用“./”表示法,这意味着基 URI 值的“当前文件夹中”。

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

WPF 应用程序可以将字体打包为内容项、资源项或库资源项。 有关详细信息,请参阅 将字体与应用程序一起打包

字体回退是指客户端应用程序选择的字体以外的字体的自动替换。 调用字体回退的原因有两个主要原因:

  • 客户端应用程序指定的字体在系统上不存在。

  • 客户端应用程序指定的字体不包含呈现文本所需的字形。

    InWPF 中,字体回退机制使用默认回退字体系列“全局用户界面”作为替换字体。 此字体定义为复合字体,其文件名为“GlobalUserInterface.CompositeFont”。 有关复合字体的详细信息,请参阅本主题中的“复合字体”部分。

    WPF 字体回退机制替换以前的 Win32 字体替换技术。

    在代码中定义字体回退序列

    可以在代码中定义字体回退序列,以便定义备用字体。 创建 FontFamily 对象时,为参数提供多个字体系列名称(用逗号 String 分隔),例如“Comic Sans MS,Verdana”。 在这种情况下,如果“漫画 Sans MS”字样中的字形不可用,则使用“Verdana”字形中的字形。 如果“Comic Sans MS”和“Verdana”都没有所需的字形,则使用字体的回退字体系列,默认为“全局用户界面”。

    以下示例演示如何在可扩展应用程序标记语言 (XAML) 和代码中定义字体回退序列。

    myTextBlock.FontFamily = new FontFamily("Comic Sans MS, Verdana"); myTextBlock.FontFamily = New FontFamily("Comic Sans MS, Verdana") <TextBlock FontFamily="Comic Sans MS, Verdana">Hello, world</TextBlock>

    回退序列中的任何一个字体都可以指定字体位置。 在以下示例中,“Pericles Light”被引用为应用程序资源,“Verdana”被引用为系统字体集合成员。

    myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./resources/#Pericles Light, Verdana"); myTextBlock.FontFamily = New FontFamily(New Uri("pack://application:,,,/"), "./resources/#Pericles Light, Verdana") <TextBlock FontFamily="./resources/#Pericles Light, Verdana">Aegean Sea</TextBlock>

    WPF 平台提供复合字体功能,允许构建全范围多语言字体,并避免显示缺失字形。 复合字体替换 Win32 字体链接、字体回退、字体绑定、字体关联和最终用户定义字符 (EUDC) 机制。

    复合字体系列可通过构造 Typeface 函数和构造函数与任何其他字体系列一样供应用程序 FontFamily 使用。 每个复合字体系列都命名,与其他字体一样,可以在多种语言中提供其名称的本地化变体。

    以下标记示例演示如何将复合字体系列定义为磁盘文件。 此文件可以与任何其他已安装字体一样存储在默认的Windows字体目录中,或者通过在按名称引用系列时包括其 URI 在任何位置进行引用。

    以下示例显示了“中的字体系列标记。CompositeFont“文件。

    <FontFamily xmlns="http://schemas.microsoft.com/winfx/2006/xaml/composite-font" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" Baseline="0.9" LineSpacing="1.2"> <!-- Name mapping --> <FontFamily.FamilyNames> <System:String x:Key="en-US">Global User Interface</System:String> </FontFamily.FamilyNames> <!-- Faces to report in font chooser UI --> <FontFamily.FamilyTypefaces> <FamilyTypeface Weight="Normal" Stretch="Normal" Style="Normal" UnderlinePosition="-0.1" UnderlineThickness="0.05" StrikethroughPosition="0.3" StrikethroughThickness="0.05" CapsHeight="0.5" XHeight="0.3" /> <FamilyTypeface Weight="Bold" Stretch="Normal" Style="Normal" UnderlinePosition="-0.1" UnderlineThickness="0.05" StrikethroughPosition="0.3" StrikethroughThickness="0.05" CapsHeight="0.5" XHeight="0.3" /> </FontFamily.FamilyTypefaces> <!-- Character to family lookups (in lookup order) --> <FontFamily.FamilyMaps> Basic Latin 0000-007F Latin-1 Supplement 0080-00FF Latin Extended-A 0100-017F Latin Extended-B 0180-024F IPA Extensions 0250-02AF Spacing Modifier Letters 02B0-02FF Combining Diacritics Marks 0300-036F Greek and Coptic 0370-03FF Cyrillic 0400-04FF Cyrillic Supplement 0500-052F Phonetic Extensions 1D00-1D7F Latin Extended Additional 1E00-1EFF Greek Extended 1F00-1FFF Alpha Pres Forms Latin FB00-FB0F --> <!-- CHS --> <FontFamilyMap Unicode="0000-052F, 1D00-1FFF, FB00-FB0F" Language="zh-Hans" Target="Times New Roman" Scale="1.0" /> <!-- CHT --> <FontFamilyMap Unicode="0000-052F, 1D00-1FFF, FB00-FB0F" Language="zh-Hant" Target="Times New Roman" Scale="1.0" /> <!-- Other (include JA and KO) --> <FontFamilyMap Unicode="0000-052F, 1D00-1FFF, FB00-FB0F" Target="Comic Sans MS, Verdana" Scale="4.0" /> Armenian 0530-058F Georgian 10D0-10FF Alpha Pres Forms Armenian FB10-FB1C --> <FontFamilyMap Unicode="0530-058F, 10D0-10FF, FB10-FB1C" Target="Sylfaen" Scale="1.0" /> <!-- Other FontFamilyMap elements defined ... --> </FontFamily.FamilyMaps> </FontFamily>

    在 WPF 安装过程中,以下四种复合字体显示在默认Windows字体目录中。

    <object FontFamily="fontFamilyNamesList"/> - or - <object FontFamily="fontFamilyFolderReference"/> - or - <object FontFamily="fontFamilyUriReference"/>

    XAML 值

    fontFamilyName
    指定字体系列名称的字符串。  例如 "Arial" "Century Gothic"

    fontFamilyNamesList
    指定多个字体系列名称的字符串,每个字符串用逗号分隔 (逗号后的任何空格将被忽略) 。 指定的第一个字体系列用作主要字体系列:后续字体系列用作回退系列,在主字体系列不可用或不适用的情况下使用。 例如, "Arial, Century Gothic" 将 Arial 指定为主字体系列,将 Century 哥特式用作回退字体系列。

    fontFamilyFolderReference
    指定包含字体的文件夹以及字体系列名称的字符串。 文件夹和字体系列名称由 #字符分隔。 文件夹引用可以是绝对引用,也可以是相对的。 例如, "Custom Fonts\#My Custom Font"

    fontFamilyUriReference
    指定字体 (URI) 以及字体系列名称的统一资源标识符的字符串。 URI 和字体系列名称由 #字符分隔。 例如, "http://MyFontServer/Fonts/#My Custom Font"

  •