Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF';s FontFamily.Source是否从中检索其值?_.net_Wpf_Fonts_Gdi+ - Fatal编程技术网

.net WPF';s FontFamily.Source是否从中检索其值?

.net WPF';s FontFamily.Source是否从中检索其值?,.net,wpf,fonts,gdi+,.net,Wpf,Fonts,Gdi+,我有两个应用程序使用相同的数据创建UI,一个使用WPF,另一个使用GDI。根据Windows中的“字体名称”属性,我正在使用一种名为“Myriad Condensed Web”的字体。使用给定的字体名称实例化System.Drawing.fontframy对象没有问题。但是,当我使用WPF的System.Windows.Media.FontFamily创建此字体时,我只能使用名称Myriad Web。在窗口字体控制面板的字体属性中,我找不到对此值的引用。当我检查System.Windows.Me

我有两个应用程序使用相同的数据创建UI,一个使用WPF,另一个使用GDI。根据Windows中的“字体名称”属性,我正在使用一种名为“Myriad Condensed Web”的字体。使用给定的字体名称实例化
System.Drawing.fontframy
对象没有问题。但是,当我使用WPF的
System.Windows.Media.FontFamily
创建此字体时,我只能使用名称
Myriad Web
。在窗口字体控制面板的字体属性中,我找不到对此值的引用。当我检查
System.Windows.Media.font.SystemFontFamilies
时,
Myriad Web
是源属性的值


所以我的问题是,WPF从哪里得到这个值?为什么它与GDI提供的价值不同?如何使用一个字体名为GDI和WPF实例化相同的字体?我想避免存储两个值——一个用于GDI,一个用于WPF。

我不能100%确定发生了什么,但我有一个很好的理论。自GDI+以来,字体技术有了长足的进步,这可能是加入OpenType支持的结果。WPF有FontStretch的概念,FontStretch类定义了“consense”、“Medium”、“Expanded”等值

此属性在旧代码中不可用,我认为Windows字体管理器合成字体系列名称以保持兼容。在普通姓氏中注入“浓缩”(etc)。因此,在心里删除这个形容词,以获得WPF名称。当然,它会扼杀你的计划,除非你考虑在代码中过滤它。

< p>我已经找到了博客帖子。
看来,这种姓氏转换方法可能是正确的方法。

感谢您的建议解释,这是有道理的。是的,它确实扼杀了我的计划。我可能必须想出另一个解决方案。对于遇到相同问题的任何人,我通过使用Type 2.2的lite版本将字体系列的族名称从
Myriad Condensed Web
更改为
Myriad Web
,从而在GDI+中与WPF中的名称相同,从而解决了这个问题。我想知道WPF是否试图通过从名称中删除样式属性(如“condented”)来推断字体系列名称,其中as GDI+使用了完整的给定字体名称。如果您记录“Type 2.2”在备份您的评论时的含义,这可能是一个好主意。这不是我以前听过的常用术语。就我一个人,说得好。Lite2.2是我能找到的唯一一款免费软件,它允许我更改字体的字体系列名称并保存它——顺便说一句。IDWriteGdiInterop确实有助于在GDI/WPF字体描述之间进行转换。唯一的缺点是它只能在Windows7和Vista上运行。