我正在创建一个 WPF 应用程序并尝试将用户界面的样式与现有网站相匹配。该站点使用Lato作为其默认字体,默认情况下在 Windows 上不可用。我想使用 Lato,但我不能要求用户安装字体。有没有办法让 WPF 使用可通过 Google Web Font 服务获得的字体定义,或者以其他方式设置它以便不需要手动安装字体?
2 回答
当然可以,最简单的方法是将字体资源编译到应用程序中:
首先,从 google web fonts 下载 TTF。从您的示例链接中找到页面底部的“在 Google Web 字体中打开 Lato”链接。这会将字体添加到您的“收藏”中。在结果页面中,靠近顶部的是一个较小的链接,标题为“下载您的收藏”,它将为您提供 zip 文件中的 TTF 字体文件。
接下来,将字体作为资源嵌入到您的 WPF 应用程序中。将文件添加到您的项目中,并确保为编译操作选择“资源”。然后,您可以在 XAML 中使用您的字体,只需将FontFamily
属性更改为资源名称而不是字体名称: <TextBlock FontFamily="/Resources/#Lato">Lato Text Here</TextBlock>
。有关更多信息,请参阅有关嵌入字体的 MSDN 文章。
FontFamily
您还可以通过将所需的任何元素或容器的属性设置为新对象来在代码中按需下载字体FontFamily
- 使用采用 URI 的构造函数并使用 TTF 的 URI。我不相信您可以使用 Google 网址直接执行此操作,因为 Google API 假定网页访问并提供脚本和/或 CSS 以及字体。另请注意,这可能需要您的应用程序已经要求的一些额外权限。
WPF 需要字体名称(不是字体文件)。在上面的示例中,<TextBlock FontFamily="/Resources/#Lato">Lato Text Here</TextBlock>
如何在“#Lato”中获取“Lato”至关重要。如果是 .ttf 字体,那么我们可以从 API GlyphTypeface https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.glyphtypeface.-ctor?view=net获取字体名称信息-5.0#定义。但是 API GlyphTypeface 仅适用于 .ttf 文件。
当然,我们可以使用任何受支持的 .EOT/.SVG/.WOFF 在线查看器并获取字体名称,然后手动将其输入到 WPF XAML 的 FontFamily 属性。
有没有其他方法可以从字体文件中以编程方式获取字体名称(WPF 所期望的)?
例如在 CSS 中,我们可以使用 @font-face 来使用各种字体。
我相信 WPF 中没有这样的选择。