UWP - 仅在Designer中应用的字体

时间:2016-02-17 19:25:08

标签: c# xaml uwp win-universal-app

我有一个由我的主要UWP应用程序(Imp.Dash)引用的类库(Imp.Dash.Cook)。在所述类库的页面中,我有以下XAML:

<TextBlock Text="Banana" FontFamily="/Imp.Dash;component/Fonts/Portmanteau Regular.ttf#Portmanteau"/>
<TextBlock Text="Banana" FontFamily="/Imp.Dash.Cook;component/Resources/Portmanteau Regular.ttf#Portmanteau"/>
<TextBlock Text="Banana" FontFamily="Resources/Portmanteau Regular.ttf#Portmanteau"/><!-- Works in Designer-->
<TextBlock Text="Banana" FontFamily="Fonts/Portmanteau Regular.ttf#Portmanteau"/>

在尝试更改字体时,只有第三行有任何影响。字体确实已更改,但仅限于设计器中。在运行时,我什么都没得到。没有输出错误或类似错误。

有没有人知道我做错了什么,或者我如何调试它?

字体是位于我的类库的Resources文件夹中的.ttf。它设置为ContentDo not copy。即使设置为Copy Always,后者也没有影响。我还尝试将其放在Fonts下的主项目中。

我的图像资源存在类似问题,但在这种情况下,它不是嵌入式资源。 (见UWP - Load image in class library

1 个答案:

答案 0 :(得分:3)

在UWP应用中,如果我们想在另一个类库中使用某些资源,我们需要使用ms-appx:方案,如下所示:

<TextBlock FontFamily="ms-appx:///Imp.Dash.Cook/Fonts/ARCADE_I.TTF#Arcade Interlaced"
           FontSize="40"
           Text="Banana" />

在此示例中,.ttf文件位于Fonts类库的Imp.Dash.Cook文件夹中。

如果我们在FontFamily中使用了错误的URI,则应用程序将无法获取字体文件,如果系统未安装此字体,则应用程序将仅使用默认字体。所以我们必须将字体添加到应用程序中。

对于您的情况,我不确定为什么字体仅应用于设计师。但是我构建a simple sample in GitHub自定义字体在设计器和运行时都应用了。你可以检查一下。

此外,如果您的类库与主UWP应用程序不在同一解决方案中,则必须检查构建配置中的“生成库布局”选项类库的属性页面。

因为在WinRT环境中,资源不再嵌入到程序集中,而是作为内容放在dll旁边。所以我们需要生成库布局,以便我们可以方便地在其他项目中引用dll。