3

96dpi に設定されたウィンドウで、キャンバス内に画像とテキストを含む単純な Web ブラウザー WPF テスト アプリケーションを作成しました。

それから120dpiに切り替えて、:-((( 表示が汚い、画像サイズが変わった、キャンバスの一部が見えない...

Winformsを使用したとき、AutoScaleModeプロパティをNoneに設定すると、ウィンドウはそのサイズを維持し、コントロールも同様に、フォントを継承したコントロールが適切に表示され、ぼやけたり、大きすぎたりしません...

W¨F でこの (良い) 動作を模倣するにはどうすればよいですか?

4

3 に答える 3

1

「Web ブラウザー WPF ... アプリケーション」の意味がよくわかりません。XBAP について話している場合を除き、WPF は Web ブラウザーでは実行されません。それともSilverlightをやっていますか?それとも単なる WPF ナビゲーション アプリケーションであり、ブラウザベースではありませんか? 明確にする必要があります。

WPF は、高 DPI モードで実行すると、コンテンツを自動的にスケーリングします。これは意図された動作です。ユーザーが明示的に画面上ですべてを大きくしたいと言った場合、WPF はユーザーの希望を尊重します。「高DPIが存在しないふりをして、すべてを通常の小さなサイズで表示し、ユーザーをあまり怒らせないことを願っています」という古いWinFormsハックは、WPFでは利用できません。あなたがそれに取り組むならば、おそらくそれらをエミュレートすることができますが、あなたは正しいことをすることに非常に強く導かれています.

WPF はすべてをスケーリングするため、「キャンバスの一部が見えない」というあなたの発言は意味がありません。キャンバス、その親ウィンドウ、およびその子要素をすべて同じ量だけスケーリングする必要があるため、すべてが 96 dpi に収まる場合は、120 dpi と 144 dpi にも収まる必要があります。そうでない場合は、おかしなことをしているので、問題を再現するコード サンプルを提供する必要があります。

高 DPI モードで実行するとフォントがぼやけると主張しているようですが、これは非常に奇妙に聞こえます。フォントはベクターとしてレンダリングされるため、きれいにスケーリングされ、高 DPI モードでもくっきりとレンダリングされます。あなたが説明したぼやけたフォントを見たことがないので、繰り返しになりますが、再現ケースを提供する必要があります。

ぼやけていると思うのは画像だけです。UI でラスター (ビットマップ) 画像 (BMP / GIF / JPG / PNG) を使用している場合 (たとえば、ツールバーのアイコンなど)、はい、スケーリングすると見栄えが悪くなります。小さなビットマップを取得して大きくすると、ほとんどの場合、見栄えが悪くなります。より大きな画像を使用してサイズを小さくして表示することで、この問題を回避できます。たとえば、ツールバーの画像を 16x16 (標準の 96 dpi モードの場合) にしたい場合は、32x32 のビットマップをXAML で Image 要素の Width="16" と Height="16" を設定し、見栄えが良くなるかどうかを確認します。実際には、120dpi モードでは 20x20 物理ピクセルになり、144dpi モードでは 24x24 になります。どちらも 32x32 リソースから縮小されたままなので、拡大する必要があった 16x16 のソース イメージよりも見栄えがよくなります。(ただし、この手法を WPF ツールバーで試したことはないので、典型的なツールバー イメージで実際にどの程度うまく機能するかはわかりません。)

画像のスケーリングに関する問題を回避する最善の方法は、ラスターではなくベクター画像を使用することです。残念ながら、ベクター画像のライブラリを見つけるのは困難です。それらは数が少なく、その中間であり、通常、ビットマップ画像で見つけられるものよりも包括的ではなく、多くの場合高価です。

于 2011-05-08T06:50:10.653 に答える
1

MaxHeight別のスタイルに継承さStaticResourceれ、ユーザーが設定した DPI の影響を受けなかったとして使用されるスタイルに設定された、.NET 4 の WPF で使用するバグを見つけました。MaxHeightからに設定するとHeight、DPI の影響を受けます。ここでは、.NET 4 (およびおそらく他のフレームワーク) のバグを疑っています。

于 2014-08-21T12:03:01.040 に答える
1

おそらく固定長単位 (px) を使用します。WPF レイアウト ルールを念頭に置いて、プロジェクトを再レイアウトしてみてください。このページには、そのためのベスト プラクティスがいくつかあります。

于 2011-05-08T14:49:07.800 に答える