UWP IoT 如何添加自定义字体

6

我无法添加自定义字体。我按照这里所述的步骤进行操作,该页面引用了这个页面,但是字体仍未在我的应用程序中使用。

我已将字体添加到项目中

enter image description here

它们出现在我的设计视图中

enter image description here

打开Windows中的字体(以验证字体名称):

enter image description here

但是,当我引用它们时,它们仍未在我的应用程序中使用。我尝试了以下语法

<TextBlock 
    Grid.Column="1" 
    Text="{x:Bind Text}"
    FontFamily="ms-appx:///Assets/Delphi-Soleto_Lt.ttf#Delphi-Soleto Light"/>

当我在设计师中选择字体时,设计师会将其填入。
<TextBlock 
    Grid.Column="1" 
    Text="{x:Bind Text}"
    FontFamily="Delphi-Soleto Light"/>

或者就像这个网站所提出的那样。

<TextBlock 
    Grid.Column="1" 
    Text="{x:Bind Text}"
    FontFamily="/Assets/Delphi-Soleto_Lt.ttf#Delphi-Soleto Light"/>

非常感谢您的帮助……!

将GIT存储库上传至:

https://github.com/basprins/CustomFontWinIot

我正在尝试在 BulletText.xaml 中使用 Delphi 字体:

    <TextBlock 
        Grid.Column="1" 
        Margin="0, 13, 0, 0"
        Style="{StaticResource Normal}" 
        Text="{x:Bind Text}"
        FontFamily="{StaticResource DefaultFont}"/>

我在主页面上添加了“BulletText”控件,该控件将在应用程序启动时立即可见。
使用引用了不会显示的字体的空白应用程序更新git repo。
在我的电脑上,我没有将字体安装到Windows中。我只是将它们添加到了项目中。代码见github页面。设计师视图的截图。 enter image description here

@touseefbsb 没有改变,结果还是一样。它仍然默认为Segoe UI。 - bas
请将其上传到公共Github存储库并与我们分享,我会尝试查看它 :) - Muhammad Touseef
也尝试一下 "ms-appx:/Assets...." (这意味着在这里只使用1个/代替3个///,看看是否有帮助) - Muhammad Touseef
我按照这个链接(http://ian.bebbs.co.uk/posts/UsingSVGInUWP)添加了SVG图标到我的应用程序中,它对我很有效。我想知道你是如何创建那些字体文件的? - Muhammad Touseef
你能把字体上传到某个地方吗?很可能你的问题出在#号后面 - 即字体名称。试试一些"Delphi-Soleto Light"的变体,比如"Delphi Soleto Light"或者"Delphi-Soleto"或者"Delphi Soleto" - 如果没有字体的话就不能确定了。 - Johnny Westlake
显示剩余3条评论
4个回答

5

我在WinIoT/UWP方面最大的挑战...但是还是来试试看...

以下是一些让那些仍然抓狂的人需要考虑的因素。

首先,这是可能的。但是很多网站会告诉你不同的故事,这会使已经过于复杂的功能变得更加复杂。

要在设备上显示字体所需完成的步骤:

向项目添加字体

这是大多数网站会告诉您的显而易见的第一步。但是还有一些需要注意的地方。

  • 存储字体的位置并不重要。它们可以位于 /Assets、/Fonts、/Assets/Fonts、/Resources 或任何您喜欢的位置。
  • 您不必关心“复制到输出”。无论如何定义都没有关系。
  • 必须将生成操作保留为“内容”。这是默认值,因此您也不必担心它。

引用字体家族名称

弄清楚正确的字体名称可能非常可怕。惯例如下:[fontfamily file path]#[font family name]。

例如:

Assets/Delphi-Soleto_Lt.ttf#Delphi-Soleto

或者完整的XAML代码:

<TextBlock FontFamily="Fonts/Delphi-Soleto_Lt.ttf#Delphi-Soleto" Text="This is Delphi Soleto Light" />

无论您是否使用msappx语法引用路径,所有后续的定义都将起作用:
<TextBlock FontFamily="Fonts/Delphi-Soleto_Lt.ttf#Delphi-Soleto" Text="This is Delphi Soleto Light" />

<TextBlock FontFamily="/Fonts/Delphi-Soleto_Lt.ttf#Delphi-Soleto" Text="This is Delphi Soleto Light" />

<TextBlock FontFamily="ms-appx:///Fonts/Delphi-Soleto_Lt.ttf#Delphi-Soleto" Text="This is Delphi Soleto Light" />

接下来就是最重要的,字体名称。需要知道的是,字体样式应该从字体名称中删除。例如:

  • 文件'Delphi-Soleto_Blk.ttf'的字体名称为Delphi-Soleto Light,变成Delphi-Soleto
  • 文件'Delphi-Soleto_Blk.ttf'的字体名称为Delphi-Soleto Black,变成Delphi-Soleto
  • 文件'Delphi-Soleto_A_Blk.ttf'的字体名称为Delphi-Soleto App Black,变成Delphi-Soleto App

为了节省你猜测字体名称的时间,我开始使用的工具可以大大帮助你。请注意Windows字体查看器可能无法显示你需要看到的内容。可以下载免费的dp4字体查看器来解决。

如果你打开dp4字体查看器并找到包含字体的文件夹,你将看到正确的字体名称。请参考下面的截图中字体系列名称。

enter image description here

验证所需字体的文本

最后一点,有些网站称xaml设计器将立即在字体中显示文本,这对测试很容易。但是在我的情况下,它不会这样做。最终帮助我解决问题的是,在调试器中运行应用程序并在应用程序运行时更改XAML。这些更改将立即反映在你的运行中的应用程序中。

最后,我可以看到我的屏幕上呈现了所需的字体

enter image description here

希望这能帮助你!特别感谢Breeze Liu花时间帮助我!


3
你不应该使用FontFamily属性中的字体重量指数来引用字体文件。如果需要设置字体重量,可以设置TextBlockFontWeight属性。尝试这样做:
<StackPanel>
    <!--Don't add "Light" in the FontFamily-->
    <TextBlock FontFamily="ms-appx:///Assets/Delphi-Soleto_Lt.ttf#Delphi-Soleto"
               Text="Hello world, this is my test"/>
    <!--Don't add "Thin" in the FontFamily-->
    <TextBlock FontFamily="ms-appx:///Assets/Delphi-Soleto_Th.ttf#Delphi-Soleto"
               Text="Hello world, this is my test"/>
    <!--This is the default font family, set the FontWeight property-->
    <TextBlock Text="Hello world, this is my test" FontWeight="Normal"/>
</StackPanel>

这是效果:

enter image description here


是的,我只是使用您在 https://github.com/basprins/CustomFontWinIot 提供的示例,然后创建了一个新的空白页面来添加这些 TextBlock,并在项目中使用您的字体,它们可以使用。你可以试试看。 - Breeze Liu - MSFT
请注意,您的字体(Delphi-Soleto_Th.ttf)与默认字体非常相似。我在我的回答中添加了图片。 - Breeze Liu - MSFT
刚刚在项目中。您可以上传一个新的UWP简单示例,在您的一侧无法工作,然后我将尝试在我的一侧进行测试。 - Breeze Liu - MSFT
PS:我也使用了ms-appx:///语法,但它也不起作用,最终我在没有该语法的情况下提交到了Github。 - bas
最后但可能不是最后...:我也尝试了将副本复制到输出,因为网上有相互矛盾的帖子。然而,无论哪种设置都没起作用... - bas
显示剩余7条评论

1

最近在针对Windows 10版本1809(Build 17763)的UWP项目中,只有通过在自定义字体前添加斜杠才能使其显示出来。

FontFamily="/Assets/Fonts/PT_Sans/PTSans-Regular.ttf#PT Sans"

没有前导斜杠或者uri以ms-appx:///开头,字体会默认为标准字体。这让我抓狂了好一阵子。
生成操作:内容
复制到输出目录:不复制
使用的字体是从谷歌下载的PTSans-Regular.ttf。

0
在你的 UWP 应用程序中使用自定义字体的一种方法是在 App.xaml 中定义:

1 - 在项目根目录下创建一个名为"Fonts"的文件夹

2 - 选择自定义字体,然后按F4并将Copy to Output Directory设置为Copy Always

3 - 在App.xaml文件 > Application.Resources标记 > ResourceDictionary标记中添加以下代码:

<FontFamily x:Key="DefaultFont">/Fonts/(Your FontName).ttf#(Font Title)</FontFamily>

在这样做之后,无论何时何地您想在元素中使用字体,都可以按照以下方式使用:

<TextBlock Text="Your Sample Text" FontFamily="{StaticResource DefaultFont}"></TextBlock>

你能试试这个吗 <FontFamily x:Key="DefaultFont">/Fonts/(你的字体名称).ttf</FontFamily> - Parsa Karami

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