嵌入字体适用于设计人员,但不适用于应用程

时间:2013-11-26 14:13:31

标签: wpf fonts

我正在构建一个wpf应用程序,我想在我的应用程序中使用Open Sans Regular字体。

我引用了this链接来嵌入字体。我将OpenSans Regular.ttf文件添加到项目属性下的资源中。

然后我在我的申请中提到了他们,如下所述:

<Window x:Class="FontEmbeddingDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" FontFamily="Resources/#Open Sans">
<Window.Resources>

</Window.Resources>
<Grid>
    <TextBlock Height="100" Text="This is test text." FontSize="14" FontFamily="Resources/#Open Sans"/>
</Grid>
</Window>

在Visual Studio的设计器中,我可以看到字体已更改为打开sans,但是当我运行应用程序时,它采用系统默认字体(我系统中的Arial)。

如果您需要任何其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:9)

来自MSDN页面:

  

当您将字体作为资源添加到应用程序时,请确保您是   设置<Resource>元素,而不是元素   在您的应用程序的项目文件中。 <EmbeddedResource>元素   不支持构建操作。

所以,我想,您必须将此字体文件添加到项目中,因为您要添加任何其他文件并将其BuildAction设置为Resource,而不是将字体添加到项目下的资源中属性,将其作为EmbeddedResource。

修改

阅读this关于如何在WPF应用程序中使用自定义字体的优秀文章。

你也可以通过@Sheridan提到的方式工作 - 将BuildAction设置为Content。但是,这种方法存在的问题是,您的二进制文件中会出现松散的单独文件。用户可能会更改此文件,这可能会导致您的应用出现问题。最好将Resource用作BuildAction,因为字体会捆绑到程序集中。

答案 1 :(得分:2)

在我看来,我认为这个问题的公认答案可能是错误的,也可能是误导性的。我以完全相同的方式使用Font个文件,我完全没有必要将BuildAction设置为Resource。我的Font个文件的BuldAction设置为Content,效果很好。我猜测接受的答案只会帮助那些将Font文件设置为EmbeddedResource的用户。

@sthotakura从链接的MSDN页面引用的评论仅仅是谈论手动编辑项目文件,问题作者没有这样做。请注意,链接页面中没有提及BuildAction属性,除了在这种情况下提及EmbeddedResource值无效。

请尝试改为:

BuildAction个文件的Font设置为Content。 像这样引用Font文件(使用所有重要的起始斜杠):

FontFamily="/Resources/#Open Sans"

我刚尝试删除项目中的起始斜杠,而Font默认为另一个Font,所以我很确定这会有效......但是,请让我知道。如果我弄错的话,我很乐意删除这个答案。