【发布时间】:2010-11-20 19:57:25
【问题描述】:
如何将System.Drawing.Font 转换为System.Windows.Media.Fonts 或TypeFace?
或者如何从System.Drawing.Font 的实例生成System.Windows.Media.Fonts 或TypeFace 的实例?
【问题讨论】:
如何将System.Drawing.Font 转换为System.Windows.Media.Fonts 或TypeFace?
或者如何从System.Drawing.Font 的实例生成System.Windows.Media.Fonts 或TypeFace 的实例?
【问题讨论】:
您无法实例化 Media.Fonts ,但我认为您可以获得 Media.FontFamily 这就是我实现它的方式。
using System.Drawing;
using Media = System.Windows.Media;
Font font = new Font(new System.Drawing.FontFamily("Comic Sans MS"), 10);
//option 1
Media.FontFamily mfont = new Media.FontFamily(font.Name);
//option 2 does the same thing
Media.FontFamilyConverter conv = new Media.FontFamilyConverter();
Media.FontFamily mfont1 = conv.ConvertFromString(font.Name) as Media.FontFamily;
//option 3
Media.FontFamily mfont2 = Media.Fonts.SystemFontFamilies.Where(x => x.Source == font.Name).FirstOrDefault();
【讨论】:
我正在使用以下代码
private static Typeface NewTypeFaceFromFont(System.Drawing.Font f)
{
Typeface typeface = null;
FontFamily ff = new FontFamily(f.Name);
if (typeface == null)
{
typeface = new Typeface(ff, (f.Style == System.Drawing.FontStyle.Italic ? FontStyles.Italic : FontStyles.Normal),
(f.Style == System.Drawing.FontStyle.Bold ? FontWeights.Bold : FontWeights.Normal),
FontStretches.Normal);
}
if (typeface == null)
{
typeface = new Typeface(new FontFamily("Arial"),
FontStyles.Italic,
FontWeights.Normal,
FontStretches.Normal);
}
return typeface;
}
【讨论】: