4

次のコードが例外をスローしないのはなぜですか?

FontFamily font = new FontFamily("bla bla bla");

現在のOSに特定のfont(FontFamily、FontStyle、FontWeightなどの組み合わせとして)存在するかどうかを知る必要があります。どうすればいいですか?

4

4 に答える 4

7

これは仕様によるものです。プログラムは、特にプログラマーの居住地から遠く離れた国では、マシンに存在しないフォントを頻繁に要求します。フォントマッパーは代替を生成します。フォントの置換は一般的に非常に一般的です。Windowsマシンを使用している場合は、現在Arialを表示しています。ただし、你好世界をこの投稿に貼り付けると、Arialに漢字のグリフがない場合でも、正確にレンダリングされることがわかります。

したがって、ヒントの1つは、使用可能なフォントについて実際に心配しないことです。Windows APIには、使用可能なフォントファミリを列挙するためのEnumFontFamiliesEx()があります。しかし、それはWPFでは公開されておらず、Windowsとの統合がかなり不十分なフォント標準であるOpenTypeとの摩擦があります。アドビがマイクロソフトが行うことすべてに関与するときのもう一つの影は、そう思われる。

WinformsのFontFamilyクラスに関するコメントに混乱があります。この場合に実際に使用できるのは、そのGetFamilies()メソッドが使用可能なファミリの配列を返します。ただし、OpenTypeフォントではなく、TrueTypeのみです。

于 2012-10-08T21:37:37.107 に答える
0

あなたはクラスを使うことができます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

于 2012-10-08T20:40:46.683 に答える
0

MSDNのFontFamilyコンストラクターによると、なぜ例外がスローされないのかという質問に答えるために、フレームワークバージョン3.5まで例外は追加されませんでした。

バージョン3.0以下をターゲットにしていると思われます。

乾杯!

于 2012-10-08T20:51:11.877 に答える
0

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();
于 2012-10-08T21:41:21.690 に答える