如何在WPF桌面应用程序中使用Google Web字体

8

我正在创建一个WPF应用程序,尝试将用户界面的样式与现有的网站相匹配。该网站使用Lato作为默认字体,但这在Windows上默认情况下不可用。我想使用Lato,但我不能要求用户安装该字体。是否有办法让WPF使用通过Google Web Font服务提供的字体定义,或以其他方式设置此项,以便无需手动安装字体?

2个回答

14

当然可以。简单的方法是将字体资源编译到您的应用程序中:

首先,从Google Web Fonts下载TTF文件。在您提供的例子链接中,找到页面底部的“在Google Web Fonts中打开Lato”的链接,这会将该字体添加到您的“集合”中。在生成的页面中,接近顶部还有一个标题为“下载您的集合”的小型链接,点击后将以zip文件的形式为您提供该TTF字体文件。

接下来,在您的WPF应用程序中将字体嵌入为一项资源。将文件添加到项目中,并确保选择“Resource”作为编译操作。然后,您只需将FontFamily属性更改为资源名称而不是字体名称即可在XAML中使用字体,例如:<TextBlock FontFamily="/Resources/#Lato">此处为Lato文本</TextBlock>。有关详细信息,请参阅MSDN上关于嵌入字体的文章

您还可以通过将要素或容器的FontFamily属性设置为新的FontFamily对象来在代码中按需下载字体 - 使用以TTF URI为参数的构造函数。我认为您无法直接使用Google URL进行此操作,因为Google API假设访问网页并提供脚本和/或CSS以及字体。此外,请注意,这可能需要一些额外的权限,超出了您的应用程序当前所需的权限。


例如,一个包含文件名为"RussoOne-Regular.ttf"的字体系列,存放在名为"Resources"的文件夹中,将会显示为... FontFamily="/Resources/#Russo One" - undefined

0

WPF需要字体名称(而不是字体文件)。在上面的示例中,如何从"#Lato"中获取"Lato"非常关键:<TextBlock FontFamily="/Resources/#Lato">Lato Text Here</TextBlock>。如果它是.ttf字体,则我们可以从API GlyphTypeface https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.glyphtypeface.-ctor?view=net-5.0#definition中获取字体名称信息。但是API GlyphTypeface仅适用于.ttf文件。

当然,我们可以使用任何支持的.EOT/.SVG/.WOFF在线查看器并获取字体名称,然后手动将其输入到WPF XAML的FontFamily属性中。

是否有其他方法可以从字体文件中以编程方式获取字体名称(WPF所期望的)?

例如,在CSS中,我们可以使用@font-face来使用各种字体。

我相信在WPF中没有这样的替代方案。


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