我有一个由我的主要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。它设置为Content
和Do not copy
。即使设置为Copy Always
,后者也没有影响。我还尝试将其放在Fonts
下的主项目中。
我的图像资源存在类似问题,但在这种情况下,它不是嵌入式资源。 (见UWP - Load image in class library)
答案 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。