我正在构建一个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)。
如果您需要任何其他信息,请与我们联系。
答案 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
,所以我很确定这会有效......但是,请让我知道。如果我弄错的话,我很乐意删除这个答案。