Click here to Skip to main content
Click here to Skip to main content
Technical Blog

Tagged as

Fun with Fonts

, 16 Apr 2009 CPOL
Rate this:
Please Sign up or sign in to vote.
How to have fun with fonts in WPF

So I've been playing around with the RichTextBox for WPF and decided that it would be a great idea to add font selection to the code. Obviously, this being WPF, I didn't want to just list the fonts out, I wanted to list the fonts out in exactly the way they'd be displayed. In other words, I want the font name to be written out using the font itself. By now it shouldn't come as a surprise to you that this is extremely easy to do in WPF.

First of all, it's really easy to get a list of the fonts. .NET provides a handy little class cunningly enough known as InstalledFontCollection, so we'll wrap that up in a handy list ready for use:

using System;
using System.Collections.Generic;
using System.Drawing.Text;
using System.Drawing;

namespace FontManager
    public class InstalledFonts : List<FontFamily>
        public InstalledFonts()
            InstalledFontCollection fonts = new InstalledFontCollection();

This class just wraps up the installed font families into a handy dataprovider format. This is all about being nice and blend-friendly.

Next we want to define a usercontrol to display the fonts. Something to note about this control; we display the data in a virtualizing stack panel - if you don't, you could end up waiting quite a while for the first display of the font.

        <Style x:Key="FontStyle">
            <Setter Property="Control.FontFamily" Value="{Binding Name}" />
            <Setter Property="Control.FontSize" Value="16" />
        <DataTemplate x:Key="FontTemplate">
            <StackPanel VirtualizingStackPanel.IsVirtualizing="True">
                    Text="{Binding Name}"
                    ToolTip="{Binding Name}"
                    Style="{StaticResource FontStyle}" />
        <ObjectDataProvider x:Key="FontProvider" ObjectType="{x:Type m:InstalledFonts}"/>
            ItemsSource="{Binding Source={StaticResource FontProvider}}"
            ItemTemplate="{StaticResource FontTemplate}" />


That's it - that's all there is to displaying your font names in the appropriate font. It is so easy, and yet another reason to love WPF. Go on - you know you love it.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Pete O'Hanlon
United Kingdom United Kingdom
A developer for over 30 years, I've been lucky enough to write articles and applications for Code Project as well as the Intel Ultimate Coder - Going Perceptual challenge. I live in the North East of England with 2 wonderful daughters and a wonderful wife.
I am not the Stig, but I do wish I had Lotus Tuned Suspension.
Follow on   Twitter   Google+

Comments and Discussions

GeneralMy vote of 5 PinprotectorBarry Lapthorn6-Feb-12 1:13 
Answera much *MUCH* easier approach PinmemberPenGunAssassin28-Jun-09 10:56 
GeneralRe: a much *MUCH* easier approach PinmvpPete O'Hanlon28-Jun-09 11:15 
QuestionFont Sizes PinmemberJoel@Novaspect21-Apr-09 4:56 
Is there a way to list the available sizes per font, or, do all fonts now come in all sizes?
I do this currently with the WPF RichText control but have found that there is no internal list that apply to each font. So, I create a "dumb" ComboBox that loads with a buch of integers.
Joel Palmer
Data Integration Engineer

AnswerRe: Font Sizes PinmvpPete O'Hanlon21-Apr-09 5:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150327.1 | Last Updated 16 Apr 2009
Article Copyright 2009 by Pete O'Hanlon
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid