我无法弄清楚如何确定如何在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" />
或FontFamily="#DinPro-BlackItalic"
这不起作用(显然不是斜体),它会回退到默认字体。我已经尝试了许多其他变体,它们可以用于字体目录中的其他字体。
例如,Comic Sans有效:FontFamily="Comic Sans MS"
(太棒了......)
现在,这就是我真的很困惑的原因:如果我只是想用不同的方式来标点字体名称,它会正确呈现!
这有效:FontFamily="Din Pro Black Italic"
总之,这是WPF中不同FontFamily设置的屏幕截图:
两个问题:
1)我应该以正确的方式猜测告诉WPF渲染这种字体?它必须在某处注册了规范名称,但在文件名,文件属性或Windows解析文件后报告的字体名称中不可见。
2)更糟糕的是,如果我试图在桌面应用程序和网络上渲染相同的字体,Windows上的Chrome浏览器甚至IE 等浏览器都需要“DINPro-BlackItalic”和不会渲染名称的间隔版本。似乎WPF和Windows浏览器使 互斥 决定使用哪个字体名称来索引字体。如何处理任意字体?
答案 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