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 属于“Times New Roman”字体系列成员的字体示例

大多数用户界面 (UI) 元素(如 Button TextBlock )提供 FontFamily 可用于为控件的文本内容指定字体的属性。 可以通过使用 值设置该属性 FontFamily 来定义字体。 以下示例演示如何在 Extensible Application Markup Language (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")
              FontFamily在标记中将 指定为属性时,始终隐含基 URI 值 - 其值为 XAML 页的 URI。 隐含基 URI 值与友好名称字符串中的相对 URI 值一起使用,以获取字体的位置。 在以下可扩展应用程序标记语言 (XAML) 示例中,请注意,相对 URI 值使用基 URI 值的“./”表示法,表示“在当前文件夹中”。

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

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

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

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

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

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

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

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

    可以在代码中定义字体回退序列,从而可以定义备用字体。 创建 FontFamily 对象时,请为 String 参数提供多个字体系列名称(用逗号分隔),例如“Comic Sans MS, Verdana”。 在这种情况下,如果“Comic 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) 机制。

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

    以下标记示例演示如何将复合字体系列定义为磁盘文件。 此文件可以与任何其他已安装字体一样存储在默认 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"

    即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback

    提交和查看相关反馈

  •