Export (0) Print
Expand All
1 out of 4 rated this helpful - Rate this topic

FontFamily Class

Represents a family of related fonts.

Namespace: System.Windows.Media
Assembly: PresentationCore (in presentationcore.dll)
XML Namespace:  http://schemas.microsoft.com/winfx/2006/xaml/presentation

[LocalizabilityAttribute(LocalizationCategory.Font)] 
[TypeConverterAttribute(typeof(FontFamilyConverter))] 
public class FontFamily
/** @attribute LocalizabilityAttribute(LocalizationCategory.Font) */ 
/** @attribute TypeConverterAttribute(System.Windows.Media.FontFamilyConverter) */ 
public class FontFamily
LocalizabilityAttribute(LocalizationCategory.Font) 
TypeConverterAttribute(System.Windows.Media.FontFamilyConverter) 
public class FontFamily
<FontFamily .../>
<object FontFamily="fontFamilyName"/>
- or -
<object FontFamily="fontFamilyNamesList"/>
- or -
<object FontFamily="fontFamilyFolderReference"/>
- or -
<object FontFamily="fontFamilyUriReference"/>
 fontFamilyName  A string specifying a font family name.  For example, "Arial" or "Century Gothic".  fontFamilyNamesList  A string specifying multiple font family names, each separated by a comma (any whitespace following a comma is ignored).  The first font family specified serves as the primary font family; subsequent font families serve as fallback families to be used in cases where the primary font family is unavailable or not applicable.  For example, "Arial, Century Gothic" specifies Arial as the primary font family, with Century Gothic as the fallback font family.  fontFamilyFolderReference  A string specifying a folder containing the font, along with a font family name.  The folder and font family name are delimited by a # character.  The folder reference may be absolute, or relative.  For example, "Custom Fonts\#My Custom Font".  fontFamilyUriReference  A string specifying a uniform resource identifier (URI) for the font, along with a font family name.  The URI and font family name are delimited by a # character.  For example, "http://MyFontServer/Fonts/#My Custom Font". 

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.

Example of typefaces that are members of the "Times New Roman" font family


Text showing bold and italic font styles

Most user interface (UI) elements, such as Button and TextBlock, let you define a font for the text content of a control. You define the font by setting the FontFamily property of the control. The following examples show how to reference a font, in Extensible Application Markup Language (XAML) and in code.

<TextBlock FontFamily="Comic Sans MS">Hello, world</TextBlock>

myTextBlock.FontFamily = new FontFamily("Comic Sans MS");

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.

<TextBlock FontFamily="file:///d:/MyFonts/#Pericles Light">
  Aegean Sea
</TextBlock>

// 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 FontFamily 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.

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

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.

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

When a FontFamily 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.

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

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

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

<TextBlock FontFamily="Comic Sans MS, Verdana">Hello, world</TextBlock>

myTextBlock.FontFamily = new FontFamily("Comic Sans MS, Verdana");

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.

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

myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./resources/#Pericles Light, Verdana");

Composite Fonts

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 FontFamily 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 the font chooser user-interface. -->
    <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="Segoe UI, Tahoma"
            Scale="1.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 .NET Framework 3.0 installation.

Font

Notes

GlobalMonospace.CompositeFont

Renders text by using a monospace font, for example, "Courier New" for Latin characters.

GlobalSanSerif.CompositeFont

Renders text by using a sans serif font, for example, "Arial" for Latin characters.

GlobalSerif.CompositeFont

Renders text by using a serif font, for example, "Times New Roman" for Latin characters.

GlobalUserInterface.CompositeFont

Renders text by using a default font, for example, "Times New Roman" for Latin characters.

The following example shows how to enumerate the fonts in the system font collection. The font family name of each FontFamily within SystemFontFamilies is added as an item to a combo box.

public void FillFontComboBox(ComboBox comboBoxFonts)
{
    // Enumerate the current set of system fonts,
    // and fill the combo box with the names of the fonts.
    foreach (FontFamily fontFamily in Fonts.SystemFontFamilies)
    {
        // FontFamily.Source contains the font family name.
        comboBoxFonts.Items.Add(fontFamily.Source);
    }

    comboBoxFonts.SelectedIndex = 0;
}

If multiple versions of the same font family reside in the same directory, the Windows Presentation Foundation (WPF) font enumeration returns the most recent version of the font. If the version information does not provide resolution, the font with latest timestamp is returned. If the timestamp information is equivalent, the font file that is first in alphabetical order is returned.

System.Object
  System.Windows.Media.FontFamily
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.