爲什麼下面的代碼不會拋出異常?爲什麼新的FontFamily(「無效字體」)不會拋出異常?
FontFamily font = new FontFamily("bla bla bla");
我需要知道,如果一個特定的font
(例如fontFamily,FontStyle,fontWeight設置的組合,...)在我目前的操作系統存在。我該怎麼辦?
爲什麼下面的代碼不會拋出異常?爲什麼新的FontFamily(「無效字體」)不會拋出異常?
FontFamily font = new FontFamily("bla bla bla");
我需要知道,如果一個特定的font
(例如fontFamily,FontStyle,fontWeight設置的組合,...)在我目前的操作系統存在。我該怎麼辦?
這是設計。程序經常要求機器上沒有的字體,特別是在遠離程序員住所的國家。字體映射器產生另一種選擇。字體替換通常很常見。如果您位於Windows計算機上,您現在正在查看Arial。但是我可以把你的世界粘貼到這篇文章中,即使Arial沒有漢字字形,你也會看到它的準確渲染。
所以,提示一號是不真正擔心可用的字體。 Windows api擁有EnumFontFamiliesEx()來枚舉可用的字體系列。但是這並沒有在WPF中暴露出來,與OpenType有一些摩擦,這是一種與Windows很不兼容的字體標準。看起來,當Adobe參與微軟所做的任何事情時都會產生另一個陰影。
關於Winforms的FontFamily類的評論有些混亂。在這種情況下,它實際上可用,它的GetFamilies()方法返回可用系列的數組。但只有TrueType,不是OpenType字體。
我有這個應用程序崩潰,沒有拋出任何異常,只有當它運行在某些機器上,並且只有當我設置某種類型的字體(例如斜體尼娜)。但是當我在其他機器上運行它時,或者如果我設置了不同的字體(普通Nina),它就具有正常行爲。你怎麼能解釋這種奇怪的行爲? – Nick
您可以使用類System.Drawing.Text.InstalledFontCollection
http://msdn.microsoft.com/en-us/library/system.drawing.text.installedfontcollection.aspx
WPF有一個框架,具體方法Fonts.SystemFontFamilies
http://msdn.microsoft.com/en-us/library/system.windows.media.fonts.systemfontfamilies.aspx
但是我怎麼能知道,例如,Nina(斜體和粗體)字體是否存在使用FontFamilies? – Nick
您可以使用Fonts.SystemFontFamilies集合瀏覽系統上的可用字體 - 使用一些Linq來匹配您需要的任何條件;
// true
bool exists = (from f in Fonts.SystemFontFamilies where f.Source.Equals("Arial") select f).Any();
// false
exists = (from f in Fonts.SystemFontFamilies where f.Source.Equals("blahblah") select f).Any();
說了這些 - Hans Passant的答案可能更合適。 –
應根據http://msdn.microsoft.com/ru-ru/library/2ext31w1.aspx –
@Artur Udod拋出異常:這是'System.Drawing.FontFamily',這不是一部分的WPF。 – BoltClock
@BoltClock,沒有注意到wpf標籤=) –