シンプルなWindowsアプリをプログラミングしています。 DBサポートは必要ありません。 WinFormsの代わりにWPFを使用するのはなぜですか?
(DBサポートがそれと何の関係があるかわかりません)
1つの明白な答えは、WPFはWinFormsよりも豊富なユーザーエクスペリエンスを提供し、たとえば、ユーザーインターフェイスで3Dのアニメーションも可能にするということです。
開発の観点からは、常に良いことであるビジネスロジック(VB.NETまたはC#)から(XAMLの)ユーザーインターフェイスの分離を実行するのに大いに役立ちます。
「WPF vs WinForms」をGoogleで検索すると、この問題を説明する多くのページが表示されます。ここですべての調査結果を繰り返すことはしませんが、 このページ には興味深い点がいくつかあります。
- WPFのデータバインディングは、Windows Formsが提供するものよりも優れています。
- UIとC#のビジネスロジックはWPFできれいに分離できます。
- 絵コンテ
- データ/コントロールテンプレート– Windows Formsが提供できるものよりもはるかにクリーンな方法。
- スタイル-クールでシンプル。アプリケーションのすべてのボタンを同じスタイルに簡単にスタイル設定できます。
- VSデザイナーが壊れても、XAMLを簡単にコーディングできます。
- UI仮想化-10万行のグリッドがあり、動きの激しい市場を刻みます。無料のUI視覚化がなければパフォーマンスは恐ろしいでしょう。
- 3Dサポート。
- 科学的なことは何もありませんが、UIの開発はWPFの方が速く感じます。おそらく、反復の終わりにWPFアプリケーションがクールに見えるからかもしれませんし、開発が本当に速いからかもしれません。
- 私はチームにユーザーエクスペリエンスエンジニアを追加できます。C#の知識がなくても、Expression Blendで魔法をかけ、フロントユーザーの取引アプリケーションにビジネスユーザーの獲得を保証する変身を与えることができます。
WPFは、Windowsデスクトップアプリケーションを開発するための現在のプラットフォームです。これは、関心の分離を維持するアプリケーションを開発するための、最新の高度なハードウェアアクセラレーションフレームワークです。 2Dベクトルと3Dグラフィックスの高度なレンダリングをサポートし、リッチでインタラクティブな高品質のユーザーインターフェイスを構築するための広範な機能を提供します。
一方、Winformsは、標準コントロールを使用して標準のルックアンドフィールで「クラシック」なWindowsアプリを開発するための基本的なプラットフォームを提供します。 WPFが提供するリッチでハードウェアアクセラレーションされたベクター2Dおよび3D機能は提供しません。 Winformsアプリケーションは、アプリケーションの動作とUI(ビュー)の間の結合が非常に大きくなる傾向があり、アプリケーションを開発するプラットフォームの柔軟性が低くなります。
どちらを選択するかは、ニーズに完全に依存します。ベクターグラフィックス、3Dレンダリング、リッチでインタラクティブなアニメーション化された最新のユーザーインターフェイスを作成する必要がある場合、および/または懸念の分離を維持したい場合は、WPFが間違いなく正しい選択です。そのどれも必要とせず、単純な問題を解決する単純なUIを作成するだけであれば、winformsはあなたのニーズをうまく満たします。
WinForms
とWPF
の唯一の最も重要な違いは、WinFormsは標準のWindowsコントロール(TextBoxなど)上の単なるレイヤーであるのに対して、WPFはゼロから構築されていないという事実です。ほとんどすべての状況で標準のWindowsコントロールに依存します。これは微妙な違いのように思えるかもしれませんが、実際にはそうではありません。Win32/ WinAPIに依存するフレームワークで作業したことがある場合は、間違いなく気付くでしょう。
この好例は、画像とテキストが表示されたボタンです。これは標準のWindowsコントロールではないため、WinFormsはすぐにこの可能性を提供しません。代わりに、自分で画像を描画するか、画像をサポートする独自のボタンを実装するか、サードパーティのコントロールを使用する必要があります。 WPFでは、ボタンは本質的にコンテンツとさまざまな状態(たとえば、タッチされていない、ホバーされた、押された)の境界であるため、何でも含めることができます。 WPFボタンは、他のほとんどのWPFコントロールと同様に「ルックレス」です。つまり、その中にさまざまな他のコントロールを含めることができます。画像とテキストを含むボタンが必要ですか?ボタン内にImageコントロールとTextBlockコントロールを配置するだけで完了です!標準のWinFormsコントロールからこの種の柔軟性を得ることはできません。そのため、画像などのボタンのようなコントロールのかなり単純な実装には大きな市場があります。
この柔軟性の欠点は、WinFormsで必要なシナリオだけのために作成されているため、WinFormsで非常に簡単なことを達成するために、一生懸命努力する必要があることです。少なくともそれは最初の感じです。WinFormsのListViewItemが1行のコードで行うように、テンプレートを作成して、画像とテキストを適切に配置したListViewを作成します。
これはほんの1つの違いでしたが、WPFを使用する場合、それが実際に他の多くの違いの根底にある理由であることに気付くでしょう。WPFは単に良い方法と悪い方法で独自の方法で物事を行うだけです。 Windowsのように物事を行うことに拘束されることはなくなりましたが、このような柔軟性を得るためには、Windowsの方法で物事をやろうとしているときにもう少し手間をかけます。
WPFはハードウェアアクセラレーションをある程度利用できますが、時間の経過とともに改善されると予想されます。
また、XAMLのおかげで、「何かをする」、宣言的対プログラム的、または両方の混合のためのオプションが増えました。
マイクロソフトはもはやwinformsで積極的な開発を行っておらず、WPFを強力に推進しています。
WPFを使用すると、「解像度に依存しない」設計がはるかに簡単になります。 winformsでそれを実現するには、 たくさん より多くの仕事。
MVVMパターンは既にコメントの1つで言及されています。これにより、コードで実際のユニットテストとGUIベースのテストを行うことができます。 大きい 私の経験では勝ちます。
WPFアプリケーションの優れたテスト機能については誰も言及していません(MVVMパターンに基づいて、正しい方法で記述されている場合)。
前の質問 に投稿された画像のようなリッチなユーザーインターフェイスを使用する場合は、WPFを使用することをお勧めします。見栄えの良いアプリケーションを簡単に作成できることは別として、Microsoftが将来プッシュするテクノロジーでもあります。 Winformsの新しい開発はほとんどありません。
A
XAMLによる任意の場所での実行。
WinApp、WebApp、Mobileとして使用できます。
一方、WindowsForm内部UI表現はC#にあります。
B
バインディング->単純なオブジェクトからオブジェクトへのデータ転送。
C
共通のルックアンドフィール(スタイル)->ルックアンドフィールのスタイルを共通に定義し、それを一連のコントロールに使用できます。
D
ディレクティブプログラミング-> XAMLでのオブジェクトのバインド。
E
エクスプレッションブレンドとアニメーション-> WPFはDirectXを使用し、DirectXはアニメーションに使用できます。
F
より高速な実行(ハードウェアレンダリング)
WPFは内部でDirectX(ハードウェアレンダリング)を使用し、Winformは内部でGDI(主にソフトウェアレンダリングを使用))を使用します。
コンピューターがモニターに表示をレンダリングする方法は2つあります。
1)(CPU)ソフトウェアレンダリング-> CPUレンダリングの場合、CPUはモニターのレンダリング表示のロジック全体を駆動します。CPUは、アプリケーションの実行、メモリ管理の実行、OSの実行などの他の操作も行います。そのため、モニターに表示するための余分な負荷がかかります。
2)(GPU)ハードウェアレンダリング->特殊なちょっとしたプロセッサ。特に、モニタでのレンダリングと表示を高速化するためのものです。
WPFでは、このレンダリングはさらに最適化されています
>Tier 0 mode (Software rendering) uses DirectX7 internally,
>Tier 1 mode (Partial Hardware rendering) uses DirectX7 to DirectX9 internally,
>Tier 2 mode (Hardware rendering) uses DirectX9 internally.
G
グラフィック独立(DIP)->平均解像度独立
解像度->画面/モニターに収まるピクセルの総数
ピクセル->画面上のシンプルなドット。
Windowsフォームはピクセルを測定単位として使用するため、ピクセルが変更されると勝ちフォームはそれ自体を調整する必要があるため、ロジックを記述する必要があります。
ただし、WPFはピクセルを測定単位として使用せず、DIP(デバイスに依存しないピクセル)を使用します
1 DIP = 1/96インチ。
最後にテスト-> MVVMパターンを使用したより良いユニットテスト。
winformsに対するWPFの利点と欠点:
ただし、WinFormsが最も優れているWPFには欠点があります。