2010-08-31 17 views
0

我有兩個應用程序使用相同的數據來創建一個用戶界面,一個使用WPF,另一個使用GDI。根據Windows中的字體名稱屬性,我使用的字體爲Myriad Condensed Web。我沒有問題使用給定的字體名稱實例化System.Drawing.FontFamily對象。但是,當我使用WPF的System.Windows.Media.FontFamily創建此字體時,我只能使用名稱Myriad Web來完成此操作。我無法在窗口字體控制面板的字體屬性中的任何位置找到對此值的引用。當我檢查System.Windows.Media.Fonts.SystemFontFamilies時,Myriad Web是Source屬性的值。WPF的FontFamily.Source從何處檢索其值?

所以我的問題是,WPF從哪裏得到這個值?爲什麼它與GDI的價值不同?我怎樣才能使用一個字體名稱爲GDI和WPF實例化相同的字體?我想避免存儲兩個值 - 一個用於GDI,一個用於WPF。

回答

1

我不是100%確定發生了什麼,但我有一個很好的理論。字體技術自GDI +以來已經取得了相當大的進展,可能是由於整合了OpenType支持。 WPF擁有FontStretch的概念,FontStretches類定義了諸如「Consensed」,「Medium」,「Expanded」等值。

該屬性在傳統代碼中不可用,我認爲Windows字體管理器會合成字體名稱保持事物兼容。通過在常規姓氏中注入「Condensed」(等)。所以,從心理上刪除這個形容詞來獲取WPF名稱。它當然會殺死你的計劃,除非你會考慮用代碼自己過濾它。

+0

感謝您的建議解釋,這*確實有道理。是的,它確實殺了我的計劃。我可能不得不想出另一個解決方案。 – Sio 2010-09-01 17:37:59

+0

對於任何遇到同樣問題的人 - 我使用Lite 2.2版本將此問題解決,將字體系列的名稱從「Myriad Condensed Web」更改爲「Myriad Web」,這使得它在GDI +中的名稱與它在WPF中有。我想知道如果WPF嘗試通過從名稱中刪除樣式屬性(如「濃縮」)來推斷字體系列名稱,其中GDI +使用完整的給定字體名稱。 – Sio 2010-09-01 22:17:44

+0

也許這是一個好主意,如果你記錄什麼「類型2.2」意味着備份你的評論。這不是我以前聽過的常用術語。儘管如此。 – 2010-09-01 22:23:06