某些字体类型无法在 UWP 中应用

Nat*_*hen 2 fonts win-universal-app uwp uwp-xaml

我发现某些字体类型无法在 UWP 中使用。

例如:Noto Sans CJK TC,或者 Noto Sans(都是谷歌开源字体)

即使此字体已安装在系统中,或放入应用程序项目并使用“ms-appx:”或相对路径来设置此字体。

(就像这个问题的答案:UWP - Font only apply in Designer,它提供了一个例子,能够使用自定义字体)

当我应用一些字体时,只在设计器中看到效果,而在运行时看不到。

并且有指导方针,但没有告诉如何知道哪种字体类型不能在 UWP 中使用。 https://msdn.microsoft.com/en-us/windows/uwp/controls-and-patterns/fonts?f=255&MSPPError=-2147217396

UWP 中是否有任何字体类型限制?

谢谢!

Jay*_*Zuo 5

我发现问题是因为我将页面放在文件夹中,但为什么呢?

在您的代码中,您使用以下代码来设置FontFamily

FontFamily="Assets/fonts/NotoSansCJKtc-Thin.otf#Noto Sans CJK TC"
Run Code Online (Sandbox Code Playgroud)

您使用的 URI 是一个相对 URI,它将访问与当前 XAML 页面相关的文件。在您的情况下,在 BlankPage1 中使用它时,它将尝试访问Assets/fonts/NotoSansCJKtc-Thin.otf当前文件夹中的文件,即“UI”文件夹。由于“UI”文件夹中没有此类文件,因此该FontFamily属性将使用其默认值。

要从 XAML 页面访问相对于包根目录的文件,您可以使用绝对路径 URI(以“/”开头的那些),如下所示:

<TextBlock Margin="0,80,0,0"
               HorizontalAlignment="Center"
               FontFamily="/Assets/fonts/NotoSansCJKtc-Thin.otf#Noto Sans CJK TC"
               FontSize="80"
               Foreground="#878787">
    ?abc012
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

或使用ms-appx:如下方案:

<TextBlock Margin="0,80,0,0"
           HorizontalAlignment="Center"
           FontFamily="ms-appx:///Assets/fonts/NotoSansCJKtc-Thin.otf#Noto Sans CJK TC"
           FontSize="80"
           Foreground="#878787">
    ?abc012
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

FontFamily="Assets/fonts/NotoSansCJKtc-Thin.otf#Noto Sans CJK TC" 可以工作,但 FontFamily="Assets/fonts/NotoSansCJKtc-Thin.otf#Noto Sans CJK TC Thin" 不行。

我身边也有同样的问题。形成 otf 文件,其字体名称应为“Noto Sans CJK TC Thin”。
在此处输入图片说明 但是,使用此字体名称在 XAML 设计器和运行时都不起作用。我认为这个问题可能与 otf 文件有关,因为我用其他一些字体进行了测试,它们都按预期工作。

我还尝试在同一解决方案中引用其他项目字体资源。

要在同一解决方案中引用其他项目字体资源,您可以参考我之前在UWP - Font only apply in Designer 中的回答。