Represents a family of related fonts.
Assembly: PresentationCore (in PresentationCore.dll)
XMLNS for XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation
[TypeConverterAttribute(typeof(FontFamilyConverter))] [LocalizabilityAttribute(LocalizationCategory.Font)] public class FontFamily
<object FontFamily="fontFamilyName"/> - or - <object FontFamily="fontFamilyNamesList"/> - or - <object FontFamily="fontFamilyFolderReference"/> - or - <object FontFamily="fontFamilyUriReference"/>
Thetype exposes the following members.
|FontFamily()||Initializes a new instance of an anonymous class.|
|FontFamily(String)||Initializes a new instance of the class from the specified font family name.|
|FontFamily(Uri, String)||Initializes a new instance of the class from the specified font family name and an optional base uniform resource identifier (URI) value.|
|Baseline||Gets or sets the distance between the baseline and the character cell top.|
|BaseUri||Gets the base uniform resource identifier (URI) that is used to resolve a font family name.|
|FamilyMaps||Gets the collection of FontFamilyMap objects.|
|FamilyNames||Gets a collection of strings and CultureInfo values that represent the font family names of the object.|
|FamilyTypefaces||Gets a collection of typefaces for the object.|
|LineSpacing||Gets or sets the line spacing value for the object. The line spacing is the recommended baseline-to-baseline distance for the text in this font relative to the em size.|
|Source||Gets the font family name that is used to construct the object.|
|Equals||Gets a value that indicates whether the current font family object and the specified font family object are the same. (Overrides Object.Equals(Object).)|
|Finalize||Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)|
|GetHashCode||Serves as a hash function for . It is suitable for use in hashing algorithms and data structures such as a hash table. (Overrides Object.GetHashCode().)|
|GetType||Gets the Type of the current instance. (Inherited from Object.)|
|GetTypefaces||Returns a collection of Typeface objects that represent the type faces in the default system font location.|
|MemberwiseClone||Creates a shallow copy of the current Object. (Inherited from Object.)|
|ToString||Returns the value of the Source property. (Overrides Object.ToString().)|
A font family is a set of typefaces that share the same family name, such as "Times New Roman", but that differ in features. These feature differences include Style, such as italic, and Weight, such as bold.
Most user interface (UI) elements, such as Button and TextBlock, provide a FontFamily property that can be used to specify a font for the text content of a control. You define the font by setting that property with a value. The following examples show how to reference a font, in Extensible Application Markup Language (XAML) and in code.
In the preceding example, the font that is referenced, "Comic Sans MS", is referred to by its friendly name. Also, in this example the font is assumed to be in the system font collection.
Specifying Fonts in Alternate Directories
A Windows Presentation Foundation (WPF) application can specify a directory, other than the directory that contains the systems font collection, for resolving font references. The friendly name of the font can specify an absolute uniform resource identifier (URI) value to resolve the font reference, as shown in the following Extensible Application Markup Language (XAML) and code examples.
// Create a new FontFamily object, using an absolute URI reference. myTextBlock.FontFamily = new FontFamily("file:///d:/MyFonts/#Pericles Light");
The friendly name of the font can also specify a relative URI value, which requires a base URI to resolve the font reference. The BaseUri property of the object corresponds to the base URI value. The following code example shows how to create a font reference that is composed of a base URI value and a relative URI value.
You can use a base URI value when you reference a font that is packaged as part of the application. For example, the base URI value can be a "pack://application" URI, which lets you reference fonts that are packaged as application resources. The following code example shows a font reference that is composed of a base URI value and a relative URI value.
When a is specified as an attribute in markup, the base URI value is always implied—its value is the URI of the XAML page. The implied base URI value is used with the relative URI value in the friendly name string to obtain the location of the font. In the following Extensible Application Markup Language (XAML) example, notice that the relative URI value uses the "./" notation, which means "in the current folder" of the base URI value.
A WPF application can package fonts as either a content item, a resource item, or a library resource item. For more information, see Packaging Fonts with Applications.
Font fallback refers to the automatic substitution of a font other than the font that is selected by the client application. There are two primary reasons why font fallback is invoked:
The font that is specified by the client application does not exist on the system.
The font that is specified by the client application does not contain the glyphs that are required to render text.
InWPF, the font fallback mechanism uses the default fallback font family, "Global User Interface", as the substitute font. This font is defined as a composite font, whose file name is "GlobalUserInterface.CompositeFont". For more information about composite fonts, see the Composite Fonts section in this topic.
The WPF font fallback mechanism replaces previous Win32 font substitution technologies.
Defining a Font Fallback Sequence in Code
You can define a font fallback sequence in your code, which lets you define an alternate font. When you create a object, provide multiple font family names, separated by commas, for the String parameter, such as "Comic Sans MS, Verdana". In this case, if the glyphs from the "Comic Sans MS" typeface are not available, glyphs from the "Verdana" typeface are used. If neither "Comic Sans MS" nor "Verdana" have the required glyphs, the fallback font family of the typeface is used, which is "Global User Interface" by default.
The following examples show how to define a font fallback sequence, in Extensible Application Markup Language (XAML) and in code.
Any one of the fonts in the fallback sequence can specify font locations. In the following examples, "Pericles Light" is referenced as an application resource, and "Verdana" is referenced as a system font collection member.
The WPF platform provides a composite font feature to allow the construction of full range multilingual fonts, and to avoid displaying missing glyphs. Composite fonts replace the Win32 font linking, font fallback, font binding, font association, and end-user-defined characters (EUDC) mechanisms.
A composite font family is available to applications through the and Typeface constructors just like any other font family. Each composite font family is named, and, as with other fonts, can provide localized variants of its name in multiple languages.
The following markup example shows how a composite font family can be defined as a disk file. This file can be stored in the default Windows font directory as with any other installed font, or can be referenced in any location by including its URI when referencing the family by name.
The following example shows the font family markup in a ".CompositeFont" file.
<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>
The following four composite fonts appear in the default Windows font directory as part of the WPF installation.
Renders text by using a monospace font, for example, "Courier New" for Latin characters.
Renders text by using a sans serif font, for example, "Arial" for Latin characters.
Renders text by using a serif font, for example, "Times New Roman" for Latin characters.
Renders text by using a default font, for example, "Times New Roman" for Latin characters.