2011-07-26 20 views
1

私は少しの啓発を探しています...私はWPFでプロジェクトに取り掛かり始めました。私はWinFormsで書いた古いコードが必要です。私は2つのプラットフォーム間の大きな違いであると想定していたためにいくつかのタイプの警告を期待していましたが、WinFormsプロジェクトからいくつかのコードファイルを新しいWPFプロジェクトにインポートして何が起こるかを確認しました。 WinFormsコードとWPFコードは同じプロジェクトにあり、同じアセンブリにコンパイルされています。エラーを予期して、私はそれをインポートすることができただけでなく、コードが正しく動作したことに驚いただけではありません。どちらもC#と.Net 4.0で書かれていますが、私はWPFとWinFormsがこのように共存できることを認識しませんでした。WinFormsとWPFは同じプロジェクトにありますか?

私は明らかにこれらのフレームワークの仕組みを誤解していますが、矛盾することなくこれらのフレームワークがどのように同じアセンブリ内に共存できるかを誰かが説明できますか?

答えて

7

実際にはWPFとWinformsの間に大きな違いはありません。彼らは両方ともHWNDを使ってコンテンツを保持します。どちらもメッセージポンプを使用します。どちらもWin32のほとんどのものの呼び出しを解決します。 WPFとWinformsはどちらもリソースを使用します。両方にアクセスするとILコードが生成されます。それらは異なるベースアセンブリを参照するだけですが、これらのベースアセンブリは、同じモジュール内でSystem.XmlとSystem.IOの両方を使用できるのと同じように共存できます。

主な相違点は、描画/レンダリングのような内部的な違いですが、WPF内でWinFormsのコンテンツをWinFormsHostで表示することができます。

2

唯一の問題は、古い学校FormでWPFコンテンツをホストしようとしているとき、またはWPF WindowでWinFormコントロールをホストしようとしているときです。そのシナリオの外では、両方とも完全に有効なILにコンパイルされます。これは、すべて.NETが正しいマシンコードを生成する必要があります。

0

一般的に言えば、WPFとWinformsは両方ともWindows Application Devのプレゼンテーションレイヤー技術です。それらは同じフレームワークのちょうど2つの異なる部分、つまり.Net Frameworkです。ウィキペディアによると

WinForms

のWinformsが インターフェース(API)は、ネイティブのMicrosoftへのアクセスを提供するマイクロソフトの.NET Framework、 の一部として含まグラフィカルアプリケーション・プログラミングに与えられた名称でありますWindowsインターフェイスの要素 は、既存のWindows APIをマネージコードでラップします。

WPF

のWindows Presentation Foundationの(またはWPF)、Windowsベースの のアプリケーションでユーザーインターフェイスをレンダリングするためのコンピュータソフトウェア グラフィックサブシステムです。以前は「Avalon」と呼ばれていたWPFは、最初は.NET Framework 3.0の一部としてリリースされた でした。以前のGDIサブシステム に頼るのではなく、WPFはDirectXを使用します。

また、次の図は、その関係についてより明確なビューを示す場合があります。 .Net Framework

関連する問題