Visual Studio Designer未显示嵌入字体

时间:2015-04-13 21:39:51

标签: c# .net 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。
  6. 以下是我在资源词典中创建的样式I的片段:

    <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>
    

    现在,在一个新的用户控件中,我创建纯粹是为了测试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." />
    

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

    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之间存在模糊的问题?

1 个答案:

答案 0 :(得分:6)

发现&amp;溶液

我无法分辨为什么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>

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

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

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

这提供了一些好处:

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

  • 此设置还允许首先从系统加载使用了字体的计算机,如果未找到,则从资源加载。

  • 。这可能是一个具有表现意识的小项目,但仍然是有益的。

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