6

WPFアプリを開発していますが、特定のフォントサイズでは、[コントロールパネル]->[フォント]に表示されるサンプルほどテキストが適切にレンダリングされないことに気付きました。大きなSegoeUIフォント(FontSize="36")を使用していますが、直立した線で効果がより顕著になります。たとえば、文字「U」は片側がもう一方より少し太い場合があります。)。

フォントの品質は、特定のフォントサイズFontSize="48"(36ptに相当すると思います)で向上しますが、限られた数のフォントサイズを使用することが常に実用的であるとは限りません。

次のプロパティをTextBlockに適用することで、フォントの品質を向上させることができます。-

TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType"

品質の向上を考えると、WPFがすべてのテキストに対してこれを行わない理由を知りたいのですが、それともパフォーマンスに問題があるのでしょうか。これをすべてのコントロールに適用するグローバルスタイルを作成することを考えていましたか、それとも問題が発生しますか?

(スクリーンショットをアップロードしようとしましたが、SOは低品質で画像を保存する必要があり、フォントの問題を実際に理解することはできませんでした)。

4

2 に答える 2

12

これは、WPFテキストチームがこの機能について書いたブログ投稿です。

:に注意してTextFormattingModeください

理想的な理想的なテキストメトリックは、WPFの導入以来テキストをフォーマットするために使用されてきたメトリックです。これらのメトリックにより、フォントファイルからのアウトラインで高い忠実度を維持するグリフの形状が得られます。グリフビットマップを作成するとき、またはグリフを相互に相対的に配置するとき、グリフの最終的な配置は考慮されません。

表示この新しいフォーマットモードでは、WPFはGDI互換のテキストメトリックを使用します。これにより、すべてのグリフの幅が複数のピクセル全体になり、ピクセル全体に配置されます。GDI互換のテキストメトリックを使用することは、グリフサイズと改行がGDIベースのフレームワークに類似していることも意味します。とはいえ、WPFで使用される改行アルゴリズムへの入力はグリフサイズだけではありません。GDIと同じメトリックを使用していても、改行は完全に同じではありません。

これらのプロパティは.NET4.0の機能であるため、元のWPFアルゴリズムをデフォルトとして保持します。これは理想的なモードです。

のためにTextRenderingMode

自動このモードでは、マシンでClearTypeを特に無効にするようにシステム設定が設定されていない限り、ClearTypeが使用されます。

エイリアシングテキストの描画にアンチエイリアシングは使用されません。

グレースケールグレースケールアンチエイリアスは、テキストの描画に使用されます。

ClearType ClearTypeアンチアリスは、テキストの描画に使用されます。

はデフォルトなのでAuto、通常はClearTypeレンダリングされます。

これらはアタッチされたプロパティであり、継承するため、ルートに設定するだけで済みますWindow。の束を作成する必要はありませんStyle

于 2013-08-06T21:50:20.387 に答える
0

ClearTypeをオンにすると、大量のデータ(10,000アイテム以上)を処理するときにパフォーマンスの小さな問題が発生することに気付きました。TextFormattingModeをDisplayに変更しても、目に見えるパフォーマンスへの影響はありません。

とはいえ、すべてのWPFアプリでは、パフォーマンスへの影響がUIをベタベタさせるほど大きくない限り、テキストレンダリングを改善するためにグローバルスタイルを使用しています。

于 2013-08-10T20:20:21.480 に答える