(。それだけでレンダリングモードフォント、だけでなく、フォントそのものではないことを追加するために月18日に編集)
関連する2つの要因がここにあります:フォント、フォントの書式設定モードが。
Windowsフォームのホストアプリケーションは、フォントサイズが8.25ptで、WPFの測定単位がFontSize
の11のデフォルトフォントファミリである "Microsoft Sans Serif"を使用していますが、WPFでは通常、既定のAeroテーマを使用してWindows 7を実行していて、WPFのデフォルト設定はです。
ここで異なる結果が表示される最大の理由は、2つの異なるフォントです。 FontFamily="Segoe UI" FontSize="12"
をUserControl
ルート要素に追加すると、2つのWPFの例がより一貫して見えるようになります。 (ただし、WPFのテキストは、含まれるWindowsフォームアプリケーションのテキストと一貫性がなくなります。ElementHost
がWPFのコンテンツにWindowsフォームのフォントの選択を伝播させる理由のすべてです)。
これを編集する前にWPFテキストレンダリングのためのIdeal
とDisplay
モードの違いにまではならないと考えていました。これは主にフォントに関するものだと認識していますが、これは当てはまりませんが、WPFテキストをWindowsと一貫して見せようとしている人にとっては便利なので、ここではこの他の問題の議論を残しますフォームテキスト。 WPFのデフォルト値はIdeal
ですが、Windowsフォームアプリケーションで実行している場合は、おそらくDisplay
が良いでしょう。これは、Windowsフォームが通常どおりにレンダリングする方法と一貫して見えるためです。
あなたは、この追加することにより、要素ごとのベースでWPFでこれを制御することができます(あなたが望むどのモードに応じて、または"Display"
)
TextOptions.TextFormattingMode="Display"
を。このアタッチ可能なプロパティは、WPF v4で追加されました。これにより、最初にリリースされて以来、スケーラブルな、わずかにぼやけたテキストレンダリングと、Win32およびGDI +(したがってWindowsフォーム)を使用します。それはそれを適用する要素に影響を与えます。また、すべての子孫にも影響します。 (たとえば、これをStackPanel
に設定した場合は、そのパネルのすべての要素に適用する必要があります(子供にローカルで異なる値に設定しない限り)。)
既定では、WPFは、Win32またはGDI +よりも元の書体デザインの忠実度を維持しようとします。また、テキストを一定の縮尺でレンダリングすることもできます。たとえば、フォントサイズを12%増やすと、テキストの幅が画面上で12%大きくなります。これは、Win32やGDI +では複雑で非線形な変更が行われる場合には当てはまりません。
しかし、多くの人が、忠実度の向上と引き換えに、ぼかしの増加について苦情を言いました。だからこそ、WPF 4はその新しいプロパティを導入しました。 Display
に設定すると、忠実度は低いがシャープな古いスタイルのレンダリングが得られます。
要素単位で選択できるので、ボールド体と通常のテキストの見た目を自由に選ぶことができます。
申し訳ありませんが、書きませんでした。TextFormattingModeとSnapsToDevicePixelsを試しました。ホストされているUserControlの結果はありません。 –
SnapsToDevicePixelsは役に立ちません。どこでTextFormattingModeを設定していますか? UserControl、またはラベルに? (そして、あなたは何を書かなかったのですか?) –
私はUserControlとLabelsで両方の方法を試しましたが、結果は同じでした。何も変わっていません。 –