我无法弄清楚如何确定如何在WPF(.NET 4.5/VS2012/Windows 8)中正确呈现特定的OpenType字体.我的计算机上安装了一个名为"DINPro-BlackItalic"的字体.
文件名是:DINPro-BlackItalic.otf
Windows报告的字体名称是:DINPro-BlackItalic

在WPF中,我做了一些简单的事情,比如:
<TextBlock Text="This is a sample sentence in DINPro-BlackItalic"
FontFamily="DinPro-BlackItalic" FontSize="24" />
Run Code Online (Sandbox Code Playgroud)
要么 FontFamily="#DinPro-BlackItalic"
这不起作用(显然不是斜体),它会回退到默认字体.我已经尝试了许多其他变种,它们适用于字体目录中的其他字体.
例如,Comic Sans的作品:( FontFamily="Comic Sans MS"真棒......)
现在,这就是为什么我真的很困惑:如果我只是猜测以不同的方式标点字体名称,它就会正确呈现!
这有效: FontFamily="Din Pro Black Italic"
总之,这是WPF中不同FontFamily设置的屏幕截图:

两个问题:
1)我该如何猜测正确的方法告诉WPF渲染这种字体?它必须在某处注册规范名称,但在文件名,文件属性或Windows解析文件后报告的字体名称中不可见.
2)更糟糕的是,如果我试图在桌面应用程序和Web上呈现相同的字体,Windows上的Chrome 甚至IE浏览器都需要 "DINPro-BlackItalic"并且不会呈现名称的间隔版本.似乎WPF和Windows浏览器就哪些字体名称用于索引字体做出相互排斥的决定.我如何处理任意字体?

您可以使用Application打包字体,也可以从项目目录中引用它.假设您将字体放在项目中的字体目录中.
您可以添加如下,
<TextBlock FontFamily=”/Fonts/DINPro-BlackItalic.otf#DinPro-BlackItalic”/>
Run Code Online (Sandbox Code Playgroud)
因此,您可以确保使用应用程序部署字体.