web-dev-qa-db-ja.com

WPFとは何ですか?WinFormsと比較してどうですか?

私はWPFを見てきましたが、実際に作業したことはありません(この質問を促した15分を除く)。私はこれを見ました post しかし、それは本当にWPFの「フラッシュ」についてです。それでは、Windows FormsアプリケーションとWPFアプリケーションの違いは何ですか?

47
Kredns

WPFは、WinFormsではないベクターグラフィックスベースのUIプレゼンテーションレイヤーです。なぜそれが重要/興味深いのですか?ベクターベースであるため、プレゼンテーションレイヤーは、UI要素を歪みなく任意のサイズにスムーズに拡大縮小できます。

WPFは構成可能なプレゼンテーションシステムでもあります。つまり、ほぼすべてのUI要素を他のUI要素で構成できます。これにより、単純なUI要素から複雑なUI要素を簡単に構築できます。

WPFは完全にデータバインディングを認識します。つまり、UI要素のプロパティを.NETオブジェクト(またはオブジェクトのプロパティ/メソッド)、別のUI要素のプロパティ、またはデータにバインドできます。はい、WinFormsはデータバインディングをサポートしていますが、より制限された方法です。

最後に、WPFは「スキン化可能」または「テーマ化可能」です。これは、開発者としてリストボックスを使用できることを意味します。

画像のリストボックスを考えてください。コンテンツを実際に画像にしたいが、それでもリストボックスの動作が必要です。これは、リストボックスを使用し、コンテンツプレゼンテーションをテキストではなく画像を含むように変更するだけで、WPFで行うのは完全に簡単です。

61
Scott Dorman

これを見る良い方法は、Winformsが何であるかを尋ねることから始めるかもしれません。

WinformsとWPFはどちらも、アプリケーションのUIレイヤーをコーディングしやすくするために設計されたフレームワークです。この辺りの本当に古い人々は、Windowsバージョンの "Hello、World"を書くと4ページほどのコードが必要になることについて話せるかもしれません。また、岩はかなり柔らかく、コーディング中に巨大なトカゲと戦わなければなりませんでした。 Winformsライブラリとデザイナーは、多くの一般的なタスクを取り、それらを簡単に記述できるようにします。

WPFも同じことを行いますが、Winformsが必ずしもUIレイヤーの一部であるとは考えていなかった多くの要素を含めることに加えて、これらの一般的なタスクに視覚的に興味深いものが多く含まれるようになりました。 WPFがコマンド、トリガー、およびデータバインディングをサポートする方法はすべてフレームワークの重要な部分ですが、その主な理由は、そもそもWinformsが存在していたのと同じ中核的な理由です。

ここでのWPFの改善点は、完全にカスタムコントロールをゼロから作成するか、カスタマイズ機能が制限された単一のコントロールセットを使用するかを選択する代わりに、コントロールの機能を外観から分離できることです。コントロールがXAMLでどのように見えるかを記述し、コントロールがコードでどのように機能するかを区別する機能は、Webプログラマーが使用するHTML /コードモデルに非常に似ています。

優れたWPFアプリケーションは、優れたWinformsアプリケーションと同じモデルに従います。 UIレイヤーから可能な限り多くのものを排除します。アプリケーションのコアロジックとデータレイヤーは同じである必要がありますが、ビジュアルをより印象的なものにする簡単な方法があります。 WPFを学習したい場合は、Winformsとほぼ同じように実際に使用してから、他の機能をリファクタリングして把握することができます。これの優れた例として、Scott HanselmanによるBabySmashの開発に関する一連のブログ投稿 ここから始まります を強くお勧めします。コードと思考の両方で、プロセスの素晴らしいウォークスルーです。

20
Raumornie

質問に答えるには、WPFアプリケーションis Windowsアプリケーションです。 WPFは、リッチなWindowsアプリケーションを作成するためのMicrosoftの新しいフレームワーク(実際には、.NETフレームワーク3.0のサブシステム)です。これは、最終的にWinFormsを置き換えることを意図しています(確かに、採用率はMSが望んだよりもはるかに遅いです)。

9
Kevin Babcock

WPFは Windows Presみ Foundation。 WinFormsテクノロジーはGDI/GDI +に依存していますが、WPFはDirectXの上に直接構築されています。つまり、.NET Frameworkクラスライブラリを引き続き使用しながら、WinFormsでできることよりもはるかに多くのことができるということです。リッチなユーザーインターフェイス、2D/3Dゲーム、プレゼンテーションなどを構築できます。 WPFはFlash(swf)ムービーによく似ていますが、要素「Movie」はありません。 WPFは.NETに基づいており、リッチなクライアント側のWeb対応アプリケーションの構築に使用できます。

3
Shahid

ここから始めて、何十ものビデオがあります: http://www.windowsclient.net/learn

この場合、マーケティングのヒントはかなり優れています。

**「Windows Formsは.NET Frameworkの一連のクラスであり、ユーザーインターフェイスコントロールとグラフィックス用の強力で拡張可能なライブラリを備えた、リッチWindowsクライアントアプリケーションの迅速な開発を可能にします。WPF- .NET 3.5 FrameworkでのWindowsフォームの相互運用性。 "*

*「Microsoft .NET Framework 3.5のコンポーネントであるWPFにより、次世代のWindowsユーザーエクスペリエンスを構築できます。WPFは、UI、メディア、ドキュメント、ハードウェアアクセラレーション、ベクターグラフィックス、さまざまなフォームファクターへのスケーラビリティ、インタラクティブなデータ視覚化をサポートし、優れたコンテンツの読みやすさ。」**

WPFを使用すると、より優れたグラフィックスサポート、より強力で柔軟なデータバインディングが得られます(データを使用している場合は、WPFを使用します)。

3
Scott Hanselman
  1. WPFは基本的に、Windowsプラットフォームのグラフィカルユーザーインターフェイスを作成するための新しいAPIです。
  2. WPFは、視覚的に素晴らしいユーザーインターフェイスと共にWindowsクライアントアプリケーションを構築するための単なる次世代のプレゼンテーションシステムではありません。
  3. WPFは、古いGDI/GDI +サブシステムに依存するのではなく、DirectX(Direct3D)の上に構築されます。
  4. WPFは、ベクターグラフィックスベースのUIプレゼンテーションレイヤーであり、ベクターベースであるため、プレゼンテーションレイヤーがUI要素を歪みなしで任意のサイズにスムーズにスケーリングできます。
  5. WPFは「スキン対応」および「テーマ対応」です。つまり、WPFではUIコントロールのルックアンドフィールを変更できます。
2
a1ashiish

実装の観点から見ると、主な違いの1つは、WPFが厳密に強制されたmodel-view-viewmodel MV-VMアーキテクチャを使用し、ビューがカスタムマークアップ言語、XAMLで定義され、viewmodelがアクセス可能なプロパティを持つクラスであり、モデルは事実上データアクセス層です。これに対して、WinFormsにはそのような明示的な分離はありません-慣例により、異なる側面は異なるC#ファイルにグループ化されますが、そのすべては依然としてコードです。実際には、これにより、WPFフレームワークがバックグラウンドで実行され、仲介されることで、WPF開発がWeb DOM開発のようになります。

0