WPF不呈现Windows OpenType字体名称

时间:2013-08-15 14:43:48

标签: wpf fonts render

我无法弄清楚如何确定如何在WPF(.NET 4.5 / VS2012 / Windows 8)中正确呈现特定的OpenType字体。我的计算机上安装了一个名为“DINPro-BlackItalic”的字体。

文件名为: DINPro-BlackItalic.otf

Windows报告字体名称为: DINPro-BlackItalic

Windows Font preview for DINPro-BlackItalic

在WPF中,我做了一些简单的事情,比如:

<TextBlock Text="This is a sample sentence in DINPro-BlackItalic"
               FontFamily="DinPro-BlackItalic" FontSize="24" />

FontFamily="#DinPro-BlackItalic"

这不起作用(显然不是斜体),它会回退到默认字体。我已经尝试了许多其他变体,它们可以用于字体目录中的其他字体。

例如,Comic Sans有效:FontFamily="Comic Sans MS"(太棒了......)

现在,这就是我真的很困惑的原因:如果我只是想用不同的方式来标点字体名称,它会正确呈现!

这有效:FontFamily="Din Pro Black Italic"

总之,这是WPF中不同FontFamily设置的屏幕截图: Several FontFamily settings in WPF

两个问题:

1)我应该以正确的方式猜测告诉WPF渲染这种字体?它必须在某处注册了规范名称,但在文件名,文件属性或Windows解析文件后报告的字体名称中不可见。

2)更糟糕的是,如果我试图在桌面应用程序和网络上渲染相同的字体,Windows上的Chrome浏览器甚至IE 等浏览器都需要“DINPro-BlackItalic”和不会渲染名称的间隔版本。似乎WPF和Windows浏览器使 互斥 决定使用哪个字体名称来索引字体。如何处理任意字体?

DINPro Font rendering in Chrome and IE

4 个答案:

答案 0 :(得分:5)

您可以使用应用程序打包字体,也可以从项目目录中引用它。 假设您将字体放在项目中的字体目录中。

您可以添加如下,

<TextBlock FontFamily=”/Fonts/DINPro-BlackItalic.otf#DinPro-BlackItalic”/>

因此,您可以确保使用应用程序部署字体。

答案 1 :(得分:1)

好的,所以我觉得我找到了解决方案..

<TextBlock FontFamily=”/Fonts/DINPro-BlackItalic.otf#Din Pro”/>

<TextBlock FontFamily=”/Fonts/DINPro-BlackItalic.otf#Din Pro Black Italic”/>

还没试过你的代码,但这似乎对我有用..引用文件路径+ fontname

Opentype文件具有共享的commen名称。这就是它变得棘手的地方,因为如果你在你的电脑上安装字体,你只能看到这个名字,并在familytree中检查它。就像你之前在问题中所展示的那样:

FontFamily="Din Pro Black Italic"

这是我的经验,并非100%确定我是对的,只是它对我有用:)

答案 2 :(得分:0)

对于WPF,最好与设计师一起尝试选择Textblock的字体

对于浏览器,可以尝试使用Label或任何其他UI控件来显示。

答案 3 :(得分:0)

适用于我的语法是:

/{Application Name};component/{Font Folder in Project}/#{Font Name (not filename)}

示例:

/ApplicationName;component/Fonts/#Proxima Nova Lt