我正在创建一个WPF应用程序,尝试将用户界面的样式与现有的网站相匹配。该网站使用Lato作为默认字体,但这在Windows上默认情况下不可用。我想使用Lato,但我不能要求用户安装该字体。是否有办法让WPF使用通过Google Web Font服务提供的字体定义,或以其他方式设置此项,以便无需手动安装字体?
当然可以。简单的方法是将字体资源编译到您的应用程序中:
首先,从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以及字体。此外,请注意,这可能需要一些额外的权限,超出了您的应用程序当前所需的权限。
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中没有这样的替代方案。
FontFamily="/Resources/#Russo One"
- undefined