2011-07-26 60 views
1

我正在尋找一點啓示...我開始在WPF中進行項目工作,並遇到了一些我在WinForms中編寫的舊代碼的需求。由於我認爲這兩個平臺之間存在巨大的差異,因此我曾預期會出現某種類型的警告,但我決定從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中使用WinFormsHost來顯示Winforms內容。

2

您唯一會看到的問題是當您嘗試在老派Form中託管WPF內容或試圖在WPF Window中託管WinForm控件時。除此之外,它們都編譯成完全有效的IL,這是所有.NET需要生成正確的機器碼的。

0

一般來說,WPF和Winforms都是Windows應用程序開發中的表示層技術。它們只是同一個框架的兩個不同部分 - .Net Framework。

根據維基百科:

WinForms

的WinForms是考慮到圖形應用程序編程 接口(API)的名稱列爲微軟.NET框架, 提供訪問本地Microsoft的一部分Windows界面元素 將現有的Windows API封裝在託管代碼中。

WPF

爲Windows Presentation Foundation(WPF或)是一種計算機軟件 在基於Windows的應用程序 渲染用戶界面的圖形子系統。以前稱爲「Avalon」的WPF最初是作爲.NET Framework 3.0的一部分發布的 。而不是依靠舊的GDI子系統,WPF使用DirectX。

而下面的圖片可能會告訴你一個更清晰的關係。 .Net Framework