9

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

文件名是:DINPro-BlackItalic.otf

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

DINPro-BlackItalic 的 Windows 字体预览

在 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 设置的屏幕截图: WPF 中的几个 FontFamily 设置

两个问题:

1)我应该如何猜测告诉 WPF 呈现这种字体的正确方法?它必须在某处注册一个规范名称,但它在文件名、文件属性或 Windows 解析文件后报告的字体名称中不可见。

2) 更糟糕的是,如果我尝试在桌面应用程序和 Web 上呈现相同的字体,Windows甚至 IE上的 Chrome 等浏览器都期望“DINPro-BlackItalic”并且不会呈现名称的间隔版本. 似乎 WPF 和 Windows 浏览器对使用哪个字体名称来索引字体做出相互排斥的决定。对于任意字体,我该如何解决这个问题?

Chrome 和 IE 中的 DINPro 字体渲染

4

4 回答 4

7

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

您可以添加如下,

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

因此,您可以确定字体与应用程序一起部署。

于 2013-10-01T04:44:39.647 回答
3

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

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

或者

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

没有尝试过你的代码,但这似乎对我有用..引用文件+字体名的路径

Opentype 文件具有它们共享的通用名称。这就是它变得棘手的地方,因为只有在您的 PC 上安装字体并在家族树中检查它时,您才能看到这个名称。就像您之前在问题中展示的那样:

FontFamily="Din Pro Black Italic"

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

于 2014-03-10T13:43:11.983 回答
0

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

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

于 2013-10-01T04:33:24.743 回答
0

对我有用的语法是:

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

例子:

/ApplicationName;component/Fonts/#Proxima Nova Lt
于 2017-06-29T15:09:25.053 回答