2008-09-08 5 views
11

他の質問にリンクしているWindows VistaのUIガイドラインを読んでいて、120 DPIに切り替えることができなければならないと述べました。さて、私は私のアプリをインストールして私の便利なVMを起動し、我々は何を得る... AAAAGH!大規模なUIが失敗!フォントサイズに依存しないUI:120 DPIに切り替えるとすべてが破損しましたか?

すべてがすべて混乱しています。一部のコンテナではテキストが十分ではありません。 「互いの隣に」配置されたいくつかのコントロールは、すべて一緒に押しつぶされ、離れて広がっています。いくつかのボタンは十分な高さではありません。私のListView列は十分に広くはありません... eeek。

まったく違うアプローチが順番にあるように聞こえます。私の前の1つは、基本的に、VS2008のWindowsフォームデザイナーを使ってピクセルベースのレイアウトを作成していたと思います。 Windowsフォームに固執すると、FlowLayoutPanelが役に立ちますが、過去には柔軟性がないことがわかりました。また、コンテナ(フォーム自体など)が十分に大きくない問題を解決することもできません。おそらくそれを行う方法がありますか?たぶんそのAutoSizeプロパティですか?

これは出荷時にWPFに移行するときのサインでもあります。私はそれがこの種のもののために特別に設計されているという印象を受けています。

基本的な問題は、これらに降りてくるようだ:

  • 私はWindowsフォームに固執した場合、彼のユーザ設定を乗り切ることができ、フォントサイズに依存しないレイアウトを実現するために、すべてのトリックは何ですかフォントが大きい、またはディスプレイを120 DPIに設定していますか?
  • ここではWPFに大きな利点がありますか?もしそうなら、それがスイッチに値すると私に納得させることができますか?
  • フォントサイズに依存しないレイアウトの一般的なベストプラクティスは、.NETスタックまたは一般的にはありますか?

答えて

11

に対処する必要がありますアンカードック性質があなたのコントロールに取り組む方法を学び、去ります可能な場合は自動サイズそのものを使用し、TableLayoutPanelを使用してください。

これら3つのことを行うと、Windowsフォームで多くのWPFデザインエクスペリエンスが得られます。よく設計されたTableLayoutPanelは、フォームに適切にフィットするようにコントロールのサイズを決めるのに最も効果的です。 AutoSizeコントロール、ドッキング、およびSoeren Kuklauが言及しているAutoScaleModeと組み合わせると、うまくスケールすることができるはずです。そうでなければ、あなたのフォームにはコントロールが多すぎるかもしれません。タブページ、フローティングツールボックス、またはその他のスペースに分割することを検討してください。

WPFでは、自動サイズ調整コントロールのコンセプトが組み込まれています。ほとんどの場合、あなたが間違っている座標ペアを使ってWPF要素を配置している場合です。それでも、低い解像度では画面をいっぱいにするのに120 dpiのテキストがかからないという事実を変えることはできません。ときどき問題はあなたのレイアウトではなく、小さなスペースにあまりにも多くを置く試みです。

+0

私は、アンカー、ドック、AutoSize、およびTableLayoutPanelsを使用して、サイズ変更可能なフォームに変換可能なUIを実現しました。しかし、 "XPスタイルのDPIスケーリング"チェックボックスがオフになっているDPI設定が高い場合、私のすべてのアプリケーションでぼやけたフォントが見つかっています。それを修正するためのヒント? –

+2

@romkyns:あなたのアプリケーションが「高dpi対応」であると明記していない限り、あなたのアプリは他のバグのあるアプリと同じkludgeを取得します。あなたのアプリケーションが現在のdpiを尋ねると、あなたのアプリケーションは(それは96だと)嘘をつきます。そして、グラフィックスカードはあなたのためにあなたのフォームをスケールアップします - それはぼやけています。マイクロソフトでは、開発者が想定していることをやり遂げることを断念しました。そのため、誰もが拡大縮小を選択する必要があります。 Google: 'dpiAware'マニフェスト –

4

私はWindowsフォームに固執した場合、ユーザーに大きな彼のフォントを設定、または120 DPIにディスプレイの設定を乗り切ることができ、フォントサイズに依存しないレイアウトを実現するためにすべてのトリックは何ですか?

については、AutoScaleModeがあなたの友人かもしれません。

4

一般に、問題はフォームのレイアウトに2つの異なる「定数」を使用し、それらの定数の1つを変更せずに変更することです。

フォームエンティティにはピクセルを使用していますが、フォントサイズを指定するにはポイント(基本的にインチ)を使用しています。ピクセルとポイントはDPIによって関連付けられているため、DPIを変更すると、ピクセル固定値がポイント固定値と一直線にならない。

これにはパッケージとクラスがありますが、終わりには単位を選択するか、単位を変更定数に従ってスケーリングする必要があります。

個人的には、フォーム上のエンティティをインチに変更します。私はC#の人ではないので、これがネイティブにサポートされているかどうか、またはアプリケーションの起動時に動的なフォームサイジングを実行する必要があるかどうかはわかりません。

ソフトウェアでこれを行う必要がある場合は、すべてのサイズを通常どおり(通常の96 DPIに)調整します。

アプリケーションが起動したら、フォームを表示する前に、システムが96 DPIであることを確認します。そうなら、素晴らしい。そうでない場合は、補正係数で変数を設定し、フォームを表示する前に各エンティティの縮尺と平行移動(位置とサイズの両方を変更)を行います。

究極のことは、すべてをインチまたはポイント(1/72インチ)で指定して、OSがそれを処理させることです。あなたはコーナーケース(正しくDPIは数ピクセルでアプリケーションを示すだろう設定付きの屋外スクリーン...)

関連する問題