如何在Windows通用应用程序中使用自定义字体?

13

和我其他的 Windows Phone 8 项目一样,我想使用自定义字体。但是在新的通用应用程序架构下,我很难实现这个目标。

我在共享项目中创建了一个名为“Fonts”的文件夹,并将字体文件添加到其中,并将属性 Build Action 设置为“Content”。

我还创建了一个名为“Themes”的文件夹,并向其中添加了一个 ResourceDictionary(“Generic.xaml”)。

我添加了一个 FontFamily 资源:

<FontFamily x:Key="RexBoldFontFamily">/Fonts/Rex Bold.otf#Rex Bold</FontFamily>

我在 App.xaml 中这样引用它:

<Application.Resources>

    <ResourceDictionary>

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Themes/Generic.xaml"/>
        </ResourceDictionary.MergedDictionaries>

        <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="true" />

    </ResourceDictionary>

</Application.Resources>

在我的Windows Phone项目的MainPage.xaml中,我尝试像这样使用它:

<TextBlock Text="{Binding HelloWorld}" Foreground="{ThemeResource RedBrush}" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="{StaticResource RexBoldFontFamily}" FontSize="22"/>

我确定这是字体的名称,因为它在我的Windows手机应用程序中有效。而且所有这些都很顺畅,因为它能够与颜色资源很好地配合使用。

有人成功分享并使用过这种字体吗?

2个回答

15

你做得非常正确,除了字体名称(#后面的部分)之外。它似乎是Rex,而不是Rex Bold。

<FontFamily x:Key="RexBoldFontFamily">/Fonts/Rex Bold.otf#Rex</FontFamily>

我现在正在工作,但是一回到家我就会检查一下。但我怀疑这个问题,因为我在另一个项目(WP8 Silverlight)中使用了“#Rex Bold”,它可以正常工作。 - fantastik78
1
所以它能工作,但我仍然不明白为什么在Windows Phone 8 Silverlight中有所不同: - fantastik78
4
重要的是要理解,#Rex 这一部分是字体的首选系列。对于某些字体来说,要想正确使用它们可能会很棘手。如有疑问,您可以随时查看此博客文章:http://www.blendrocks.com/code-blend/2015/01/04/a-complete-guide-to-working-with-custom-fonts-in-your-windows-and-windows-phone-app - Deani Hansen
2
这篇博客救了我的命。谢谢! - Simon K.

4
请在您的XAML中使用此代码。
<TextBlock x:Name="txtblk" HorizontalAlignment="Left" TextWrapping="Wrap" FontFamily="Assets/filename.ttf#Font Name"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接