【问题标题】:Any way to use Google Web Font in a WPF desktop Application在 WPF 桌面应用程序中使用 Google Web 字体的任何方式
【发布时间】:2021-07-06 15:14:45
【问题描述】:

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

【问题讨论】:

    标签: wpf webfonts


    【解决方案1】:

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

    首先,从 google web fonts 下载 TTF。从您的示例链接中找到页面底部的“在 Google Web 字体中打开 Lato”链接。这会将字体添加到您的“收藏”中。在结果页面中,靠近顶部的是一个较小的链接,标题为“下载您的收藏”,它将为您提供 zip 文件中的 TTF 字体文件。

    接下来,将字体作为资源嵌入到您的 WPF 应用程序中。将文件添加到您的项目中,并确保为编译操作选择“资源”。然后,您只需将FontFamily 属性更改为资源名称而不是字体名称即可在XAML 中使用您的字体:<TextBlock FontFamily="/Resources/#Lato">Lato Text Here</TextBlock>。请参阅MSDN article on embedding fonts 了解更多信息。

    您还可以通过将您想要的任何元素或容器的 FontFamily 属性设置为新的 FontFamily 对象,在代码中按需下载字体 - 使用接受 URI 的构造函数并使用 TTF 的 URI。我不相信您可以直接使用 Google 网址来执行此操作,因为 Google API 假定网页访问并提供脚本和/或 CSS 以及字体。另请注意,这可能需要您的应用程序已经要求的一些额外权限。

    【讨论】:

      【解决方案2】:

      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#definition 获取字体名称信息。 但是 API GlyphTypeface 仅适用于 .ttf 文件。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-04-17
        • 2011-01-04
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-15
        相关资源
        最近更新 更多