2011-06-29 64 views
2

这真的很奇怪。在Blend 4中,当我在设计器中看到应用程序时,自定义字体起作用,但是当我运行它时,字体消失了,它又回到了arial或其他东西。这是我的XAML:WPF自定义字体问题

<TextBlock Text="Text G" FontFamily="/ProjectName;component/Fonts/#Futura Lt BT" FontSize="48" Background="#FFC44747" /> 

的字体是一个叫“字体”文件夹,在其中我想要的字体是一种叫做“控件”文件夹中的控制英寸我知道它必须是“Fonts”文件夹与“Controls”文件夹的相对位置有问题,但我已经尝试了很多东西,但它不起作用。

另外,我放置的XAML标记是Blend在选择自定义字体时创建的。字体被复制为资源(我已经检查过csprof文件,它在那里)。

任何想法?这一直在踢我的屁股现在几个小时。

谢谢。

+0

“有一天我编译了(没有改变)” - 你的SCC中有什么比较说的? –

+0

@Mitch小麦完全没有改变,显然这是WPF中的一个错误。 – Carlo

+0

我不明白downvotes,因为它是一个真实(而且非常烦人)的问题,有时候stackoverflow社区可能会非常讨厌。 – Carlo

回答

0

无处不在互联网和书籍中,它说当你添加一个字体时,你应该把Build Action设置为“Resource”(example here)。它“工作了一段时间。无论如何,要解决我的问题,我必须将其从“资源”更改为“内容”。

+0

将字体设置为“内容”(假定使用“始终复制”)将该字体放置在系统中,用户可以在其中操作该字体。不太可能,已经授予,但将其作为资源是一种更好的惯例。 –

1

虽然我明白,这是为时已晚,以帮助这个问题笔者,我要离开这个帮助这个问题的未来观众。

在这个答案的信息来自Packaging Fonts with Applications页面上MSDN:

添加字体作为内容项

您可以添加字体到您的应用程序是独立于项目的内容项目应用程序的汇编文件。这意味着内容项目不会作为资源嵌入到程序集中。以下项目文件示例显示如何定义内容项目。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- Other project build settings ... --> 

    <ItemGroup> 
    <Content Include="Peric.ttf" /> 
    <Content Include="Pericl.ttf" /> 
    </ItemGroup> 
</Project> 

为了确保应用程序可以在运行时使用的字体,字体必须在应用程序的部署目录访问。应用程序项目文件中的元素允许您在构建过程中自动将字体复制到应用程序部署目录。以下项目文件示例显示如何将字体复制到部署目录。

<ItemGroup> 
    <Content Include="Peric.ttf"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    <Content Include="Pericl.ttf"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

添加字体作为资源项

您可以字体添加到您的应用程序嵌入应用程序的组件文件中项目资源的项目。为资源使用单独的子目录有助于组织应用程序的项目文件。以下项目文件示例显示如何在单独的子目录中将字体定义为资源项目。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- Other project build settings ... --> 

    <ItemGroup> 
    <Resource Include="resources\Peric.ttf" /> 
    <Resource Include="resources\Pericl.ttf" /> 
    </ItemGroup> 
</Project> 

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

以下标记示例显示如何引用应用程序的字体资源。

<TextBlock FontFamily="./resources/#Pericles Light"> 
    Aegean Sea 
</TextBlock> 

请按照从码和其他有用的信息引用字体资源上面的链接了解详情。