I have successfully loaded a .ttf font. Now, how do I use it in a TextBox?
FILE: MainWindow.xaml.cs
Code:
namespace myNameSpace
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
LoadFont();
}
[DllImport("gdi32.dll")]
private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts);
PrivateFontCollection mFontCollection = new PrivateFontCollection();
private void LoadFont()
{
// specify embedded resource name
string resource = "myNameSpace.fixedsys.ttf";
// receive resource stream
Stream fontStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);
//create an unsafe memory block for the data
System.IntPtr data = Marshal.AllocCoTaskMem((int)fontStream.Length);
//create a buffer to read in to
Byte[] fontData = new Byte[fontStream.Length];
//fetch the font program from the resource
fontStream.Read(fontData, 0, (int)fontStream.Length);
//copy the bytes to the unsafe memory block
Marshal.Copy(fontData, 0, data, (int)fontStream.Length);
// We HAVE to do this to register the font to the system (Weird .NET bug !)
uint cFonts = 0;
AddFontMemResourceEx(data, (uint)fontData.Length, IntPtr.Zero, ref cFonts);
//pass the font to the font collection
mFontCollection.AddMemoryFont(data, (int)fontStream.Length);
//close the resource stream
fontStream.Close();
//free the unsafe memory
Marshal.FreeCoTaskMem(data);
}
}
}
FILE: MainWindow.xaml
Code:
<Window x:Class="myNameSpace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Hello World" Height="768" Width="1366" Loaded="Window_Loaded" Closed="Window_Closed">
<Grid Background="Black">
<TextBox
x:Name="OutputWindow_TEST"
TextWrapping="Wrap"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Background="Black"
Foreground="White"
Width="338"
/>
</Grid>
</Window>
So, in my "OutputWindow_TEST" textbox, how do I add my embedded font?
I type the "FontFamily" property of the textbox and all my system fonts show up as options, but not the one I embedded.
Thanks.