如何将System.Drawing.font转换为System.Windows.Media.Fonts或TypeFace?

tim*_*ing 12 c# fonts

如何将a转换System.Drawing.Font为a System.Windows.Media.FontsTypeFace

或者,我怎么能生成的实例System.Windows.Media.Fonts或者TypeFace从一个实例System.Drawing.Font

Sta*_* R. 10

你不能实例化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();
Run Code Online (Sandbox Code Playgroud)

  • 如果系统上没有安装该字体怎么办?也许我们想在安装之前显示字体的预览. (5认同)
  • 如果我的字体来自未安装在系统上的嵌入式资源怎么办? (2认同)

tim*_*ing 6

我正在使用以下代码

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;

}
Run Code Online (Sandbox Code Playgroud)