Visual Studio Designer未显示嵌入字体

Jus*_*ell 5 .net c# wpf fonts

我在使用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.

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

<Style x:Key="OpenSans">
    <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Fonts/#Open Sans" />
</Style>

<Style x:Key="FontAwesome">
    <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Fonts/#FontAwesome" />
</Style>
Run Code Online (Sandbox Code Playgroud)

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

    <TextBlock Style="{StaticResource FontAwesome}" FontSize="64" Text="&#xf085;" />
    <TextBlock Style="{StaticResource OpenSans}" FontSize="48" Text="the quick brown fox jumped over the lazy dog." />
    <TextBlock FontFamily="Open Sans" FontSize="48" Text="the quick brown fox jumped over the lazy dog." />
Run Code Online (Sandbox Code Playgroud)

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设计器中OTF和TTF之间存在模糊的问题?

Jus*_*ell 6

发现和解决方案

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

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

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

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

<Style x:Key="OpenSans">
    <Setter Property="TextElement.FontFamily" Value="Open Sans, /<project name>;component/Fonts/#Open Sans" />
</Style>
Run Code Online (Sandbox Code Playgroud)

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

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

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

这提供了一些好处:

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

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

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