2011-07-26 58 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