是否可以有一个包含Winforms和WPF的项目?
说一个在WPF中逐步转换的WinForm项目(通过表单形式),可以在按钮上打开Winform,在另一个按钮上打开一个WPF吗?
答案 0 :(得分:15)
是。您必须选择一种技术来显示应用中的每个物理窗口和控件,但没有理由不能混合搭配。
例如:
答案 1 :(得分:2)
这很有效。 可以在Windows窗体中使用WPF窗口,在WPF中使用Windows窗体窗口
http://msdn.microsoft.com/en-us/library/ms745781.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.integration.windowsformshost.aspx
答案 2 :(得分:1)
您可能正在寻找的是ElementHost
控件。它允许您执行的操作是获取WPF内容并将其托管在Windows窗体窗口中。更多细节在这里:
http://msdn.microsoft.com/en-us/library/ms745781.aspx
还有一个控件可以让您反向执行:从WPF中托管Windows窗体内容:
http://nayyeri.net/host-windows-forms-controls-in-wpf
在两者之间,您可以在一定程度上灵活地移动WPF和Windows窗体之间的“分界线”。
有一点需要注意,你需要记住。 Windows窗体在HWND
的内部工作......由传统的Windows窗口管理器(处理z顺序)管理的窗口。 WPF不会这样做...... WPF树通常会呈现为单个HWND
',它是用于管理z-order之类的东西的WPF。这对您来说意味着z-order并不总是按照您期望的方式工作,并且您可以使用传统WPF元素对托管的Windows窗体控件执行某些操作。 (实际上有一种方法可以解决这个问题,但它涉及定期将HWND渲染到内存位图中,将该位图渲染到WPF表面,然后将指向WPF表面的事件重定向到基础HWND
。这是强大,但很棘手,很难做对。)
答案 3 :(得分:1)
可以顺利地(直接从“添加新项”菜单)向WPF项目添加Winforms,但是没有直接选项将WPF窗口添加到Winforms项目。不过,我按照以下步骤处理了这个问题:
添加WPF用户控件(此选项在“添加新内容”中可用 项目“菜单”,然后将其转换为WPF窗口。修改XAML 将UserControl父标记更改为Window,并删除 来自UserControl的继承(所有这些都在this link中解释)。
添加对System.Xaml.dll的引用。请参阅this link。
添加对System.Windows.dll的引用(我在我的计算机上找到它的路径:C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5。请注意你的可能会有所不同)。请参阅this link。
答案 4 :(得分:0)
我没有反对这样做。(我在WinForms Application WPF窗口中) 许多示例使用MessageBox.Show,它是Windows.Forms的一部分。 当然,您必须重写所有窗口,而不仅仅是控件。