【问题标题】:System.Drawing.FontFamily does not accept Uri-based FontSystem.Drawing.FontFamily 不接受基于 Uri 的字体
【发布时间】:2017-04-07 16:06:15
【问题描述】:

有没有办法将外部字体定义为新的System.Drawing.FontFamily?我尝试使用此代码:

 FontFamily robotoLight = new FontFamily(new Uri("pack://application:,,,/"), 
                                         "./Fonts/#Roboto Light");

并显示此错误:

无法从System.Uri 转换为string

我意识到我一直在使用不同的引用,而接受 Uri 的是 System.Windows.Media.FontFamily,所以它不起作用。

我研究并发现定义自定义字体是使用PrivateFontCollection.AddFontFile,但它使用字体的绝对路径,如回答here

我的字体当前位于项目内的 fonts 文件夹中,并且被构建为包含在 .exe 文件中,因此绝对路径对我来说是不可行的。

我需要使用System.Drawing 而不是System.Windows.Media,因为我正在创建一个自定义的MessageBox

【问题讨论】:

  • 您确定“Roboto Light”是字体名称而不仅仅是文件名称吗?试试“./Fonts/#Roboto”。
  • @mm8 我确定。我一直在项目的其他部分使用它。我使用字体的安装程序检查了它
  • 哦,System.Drawing.FontFamily 不理解包 URI。
  • @mm8 是的,我不能使用System.Windows.Media.FontFamily,因为我需要System.Drawing.FontFamily
  • @Downvoter 介意解释吗?

标签: c# wpf fonts


【解决方案1】:

System.Drawing.FontFamily 不理解包 URI。请参阅以下问题,了解如何将嵌入字体与 System.Drawing.FontFamily 类一起使用:

How to quickly and easily embed fonts in winforms app in C#

【讨论】:

  • 实现了,但不确定它是否真的有效。我将它与另一个带有乱码字体名称的字体进行了比较,以将其恢复为默认字体,我尝试使用BoldItalic 版本似乎有所不同,但它既不接受FontStyle.Regular,也不接受FontStyle.Bold。无论如何,谢谢你的链接。
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多