11

だから私は、誰かが別の質問にリンクしている Windows Vista UI ガイドラインを読んでいて、120 DPI に切り替えても生き残ることができるはずだと述べていました。さて、アプリをインストールした状態で便利な VM を起動しました。大規模な UI が失敗しました!

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

まったく異なるアプローチが必要なようです。私の以前のものは、基本的に VS2008 Windows フォーム デザイナーを使用して、おそらくピクセル ベースのレイアウトを作成していました。Windows Forms に固執するなら、FlowLayoutPanels が役立つことはわかりますが、以前はかなり柔軟性がないと感じていました。また、コンテナー (フォーム自体など) が十分に大きくないという問題も解決しません。おそらくそれを行う方法がありますか?もしかしてそのAutoSize物件?

これは、WPF に移行する時期が来たことを示している可能性もあります。この種のことのために特別に設計されているという印象を受けています。

基本的な問題は次のようになります。

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

3 に答える 3

11

AnchorプロパティとDockプロパティがコントロールでどのように機能するかを学び、AutoSizeできるものはそのままにして、可能な場合は a を使用しTableLayoutPanelます。

これら 3 つのことを行うと、Windows フォームでの WPF 設計の多くの経験を得ることができます。適切に設計されTableLayoutPanelたものは、フォームに適切に収まるようにコントロールのサイズを調整するために最善を尽くします。AutoSizeコントロール、ドッキング、およびSoeren Kuklau によって言及された AutoScaleMode と組み合わせると、適切にスケーリングするものを作成できるはずです。そうでない場合は、フォームにコントロールが多すぎる可能性があります。タブ ページ、フローティング ツールボックス、またはその他のスペースに分割することを検討してください。

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

于 2008-09-08T21:25:57.610 に答える
4

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

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

これにはパッケージとクラスがありますが、1 日の終わりに、いずれかのユニットを選択するか、変化する定数に従ってユニットの 1 つをスケーリングする必要があります。

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

ソフトウェアでこれを行う必要がある場合は、すべてを通常どおりにサイズ変更してください (たとえば、通常の 96 DPI にします)。

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

ただし、最終的には、すべてをインチまたはポイント (ポイントは 1/72 インチ) で指定し、OS に処理させることになります。まれなケースに対処する必要がある場合があります (DPI が正しく設定された屋外の画面では、アプリケーションが数ピクセルで表示されます...)。

于 2008-09-08T20:34:36.003 に答える
4

Windows フォームに固執する場合、ユーザーがフォントを大きく設定したり、ディスプレイを 120 DPI に設定したりしても、フォント サイズに依存しないレイアウトを実現するためのすべての秘訣は何ですか?

1 つには、AutoScaleModeがあなたの味方かもしれません。

于 2008-09-08T20:00:53.743 に答える