Visual Studio Designer未显示嵌入字体

我在使用Visual Studio 2013的C#WPF .NET 4.0应用程序(特别是Open Sans和FontAwesome)中使用了一些自定义字体。

我有:

  1. 将FontAwesome.otf和OpenSans-Regular.ttf添加到/ Fonts下的项目(而不是链接)。
  2. 确保两种字体都设置为“资源”。
  3. 在本地安装两种字体(Windows 8.1)。
  4. 在我的资源字典中创建了新的样式(包含许多其他部分,所以我相信它正在工作)。
  5. 重启VS2013。

这是我在资源词典中创建的样式的片段:

      

现在,在一个新的用户控件中,我创建纯粹是为了测试Designer并正确包含这些字体,我编写了以下XAML:

     

FontAwesome在设计器中运行,在我的PC和另一台PC上运行时没有安装FoneAwesome。

OpenSans样式不会显示在设计器中,但会在执行时显示,包括在未安装Open Sans的其他PC上执行。

Open Sans FontFamily选项显示在设计器中,但未安装Open Sans(预期)的其他PC上不显示。

问题

我希望能够使用Designer在设计时看到给定我提供的字体时UI的样子。 利用我创建的样式,我可以在Designer中看到FontAwesome图标,但不能看到Open Sans字体。 我可以在两者之间区别的唯一区别是FontAwesome是一个Open-Type字体,而Open Sans是一个True-Type字体。

有没有人知道我是否忽略了一些简单的东西,或者在VS Designer中OTF和TTF之间是否存在模糊的问题?

发现和解决方案

我无法分辨为什么Open Sans不在VS Designer中渲染。 我所做的每次尝试强制它使用Open Sans(来自附加到项目的字体资源)都会失败,并且Designer会回退到默认字体。

使用与FontAwesome相同的方法按预期工作,因此VS中的字体渲染系统有一些我无法解释的元素。

但是,我提出了一个很好的(可能更好的?)解决方案,以及我不了解WPF中字体选择的提示:

WPF中的FontFamily属性支持回退值,例如:

  

请注意,此属性的值首先是“Open Sans”,然后是逗号,即项目中包含的字体的URI。 (提醒一下,您需要确保字体资源的属性是“构建操作属性”下的“资源”类型(右键单击解决方案资源管理器中的字体文件。))

此语法通知WPF使用列出的第一个字体(如果不可用),然后回退到第二个字体系列,依此类推。

这是(可能)更好的解决方案,因为它询问系统是否已经可用所需的字体(在此示例中为Open Sans)。 如果是这样,它使用该系统字体,如果没有,它将加载嵌入的字体文件资源。

这提供了一些好处:

  • 此设置使VS Designer使用Open Sans(在此示例中)使用它们显示字体,因此我可以设计并查看相关字体。

  • 此设置还允许首先从系统加载使用了字体的计算机,如果未找到,则从资源加载。 也许是一个表现细微的小项目,但仍然有益。

我希望这对使用Open Sans(或其他字体)的其他人有益,因为某些原因这些字体不会出现在VS Designer中,除非直接作为系统字体引用。