在WindowsForm APP中打开WPF窗口
我在我的WindowsForm应用程序中添加了一个名为novoLogin的新WPF窗口。
添加后,我添加了system.xaml参考….调试正常。
现在我正试图从现有的windowsForm中打开这个新窗口。
novoLogin nl = new novoLogin(); nl.show();
编译器给出了这个错误:
错误1’WindowsFormsApplication1.novoLogin’不包含’show’的定义,并且没有扩展方法’show’可以找到接受类型’WindowsFormsApplication1.novoLogin’的第一个参数(你是否缺少using指令或程序集引用?)
这篇简短的文章解释了如何实现这一目标。
如果你发现自己需要从WinForms程序打开一个WPF窗口,这是一种方法(对我有用):
- 创建/添加
WPF Custom Control Library
类型的新项目 - 添加一个新的
Window (WPF)
类型的项目Window (WPF)
- 用WPF窗口做你的事
-
从您的WinForms应用程序,创建并打开WPF窗口
using System; using System.Windows.Forms; using System.Windows.Forms.Integration; var wpfwindow = new WPFWindow.Window1(); ElementHost.EnableModelessKeyboardInterop(wpfwindow); wpfwindow.Show();
看看这个: http : //www.mobilemotion.eu/?p = 1537&lang = en
摘要:
在任何文本编辑器中打开项目的清单文件(扩展名为.csproj或扩展名为.vbproj的文件)。 顶级节点通常包含多个标签,一个用于每个构建配置,另一个用于全局构建。 在全局节点(没有Condition属性的节点)中,搜索子节点或创建一个子节点( 如果它不存在) 。 该节点应包含两个GUID:FAE04EC0-301F-11D3-BF4B-00C04F79EFBC(代表C#项目)和60dc8134-eba5-43b8-bcc9-bb4bc16c2548(代表WPF)。 整行应如下所示:
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} (如果您对详细信息感兴趣,codeproject会保留一份潜在项目GUID的完整列表: http : //www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs )
在Visual Studio中重新加载项目,然后打开“添加新项”向导。
由于该项目现在正式归类为WPF项目,因此该向导现在应包含WPF窗口选项。 顺便说一下,由于没有可以覆盖的WinForms项目GUID,这种方法不会损害现有的项目组件。
我只是尝试了这种方法用于VB.NET项目,它的工作原理!
使用VB.NET显然你必须编辑上面的行代替来自{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}的GUID到{F184B08F-C81C-45F6-A57F-5ABD9991F28F}
我想在windowForm中显示wpf表单,并且存在一些资源问题……
(因为我使用了资源..)。 最后我在windowsForm项目中使用了这段代码:
首先创建一个app类的全局实例,如下所示:
WPFTest.App app;
为什么这是全球性的?
因为这个类是单例,你不能在同一个AppDomain中创建多个实例
现在举个例子,你有一个按钮事件来显示wpf表单。 在按钮事件中,我们有:
private void button1_Click(object sender, EventArgs e) { if (System.Windows.Application.Current == null) { app = new WPFTest.App() { ShutdownMode = ShutdownMode.OnExplicitShutdown }; app.InitializeComponent(); } else { app = (WPFTest.App)System.Windows.Application.Current; app.MainWindow = new WPFTest.YourWindow(); System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(app.MainWindow); app.MainWindow.Show(); } }
注意:WPFTest是项目的名称,YourWindow()是您想要显示的窗口