FontFamily 类

定义

表示一系列相关字体。

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”,但在功能上有所不同。 这些功能差异包括 Style(如 斜体)和 Weight(如粗体)。

字体
属于“Times New Roman”字体系列成员的字体示例

大多数用户界面 (UI) 元素(如 ButtonTextBlock)提供 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 字体目录中会显示以下四种复合字体。

字体 说明
GlobalMonospace.CompositeFont 使用正则空格字体呈现文本,例如,拉丁字符的“Courier New”。
GlobalSanSerif.CompositeFont 使用无衬线字体呈现文本,例如拉丁字符的“Arial”。
GlobalSerif.CompositeFont 使用衬线字体呈现文本,例如,拉丁字符的“Times New Roman”。
GlobalUserInterface.CompositeFont 使用默认字体呈现文本,例如,拉丁字符的“Times New Roman”。

XAML 属性用法

<object FontFamily="fontFamilyName"/>  
- or -  
<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"

构造函数

FontFamily()

初始化匿名 FontFamily 类的一个新实例。

FontFamily(String)

从指定的字体系列名称初始化 FontFamily 类的一个新实例。

FontFamily(Uri, String)

从指定的字体系列名称和可选的基本统一资源标识符 (URI) 值初始化 FontFamily 类的新实例。

属性

Baseline

获取或设置基线与字符单元格顶部之间的距离。

BaseUri

获取用于解析字体系列名称的基本统一资源标识符 (URI)。

FamilyMaps

获取 FontFamilyMap 对象的集合。

FamilyNames

获取表示 CultureInfo 对象的字体系列名称的字符串和 FontFamily 值的集合。

FamilyTypefaces

获取 FontFamily 对象的字体集合。

LineSpacing

获取或设置 FontFamily 对象的行距值。 行距是使用此字体的文本的建议基线间距离(相对于全身大小)。

Source

获取用于构造 FontFamily 对象的字体系列名称。

方法

Equals(Object)

获取一个值,该值指示当前的字体系列对象是否与指定的字体系列对象相同。

GetHashCode()

用作 FontFamily 的哈希函数。 它适用于哈希算法和数据结构(如哈希表)。

GetType()

获取当前实例的 Type

(继承自 Object)
GetTypefaces()

返回 Typeface 对象的集合,这些对象表示默认的系统字体位置中的字体。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回 Source 属性的值。

适用于

另请参阅