在Windows窗体APP中打开WPF窗口

时间:2011-11-29 13:58:55

标签: c# wpf winforms

我在WindowsForm应用程序中添加了一个名为novoLogin的新WPF窗口。

添加之后,我添加了system.xaml参考.... debug fine。

现在我正试图从现有的windowsForm中打开这个新窗口。

novoLogin nl = new novoLogin();
nl.show();

编译器发出此错误:

  

错误1'WindowsFormsApplication1.novoLogin'不包含   'show'的定义,没有扩展方法'show'接受第一个   可以找到类型为“WindowsFormsApplication1.novoLogin”的参数   (您是否缺少using指令或程序集引用?)

3 个答案:

答案 0 :(得分:27)

brief article 解释了如何实现这一目标。

如果您发现自己需要从WinForms程序打开WPF窗口,这是一种方法(对我有用):

  1. 创建/添加类型为WPF Custom Control Library
  2. 的新项目
  3. 添加Window (WPF)
  4. 类型的新项目
  5. 使用WPF窗口做你的事情
  6. 从WinForms应用程序中,创建并打开WPF窗口

    using System;  
    using System.Windows.Forms;  
    using System.Windows.Forms.Integration;  
    
    var wpfwindow = new WPFWindow.Window1(); 
    ElementHost.EnableModelessKeyboardInterop(wpfwindow); 
    wpfwindow.Show();
    

答案 1 :(得分:5)

看看这个:http://www.mobilemotion.eu/?p=1537&lang=en

摘要:

  

在任何文本编辑器中打开项目的清单文件(扩展名为.csproj或扩展名为.vbproj的文件)。   顶级节点通常包含多个标签,每个标签用于每个构建配置,另一个用于全局构建。在全球范围内    node(没有Condition属性的那个),搜索   子节点或创建一个,如果不是   存在即可。此节点应包含两个GUID:   FAE04EC0-301F-11D3-BF4B-00C04F79EFBC,代表C#项目,   和60dc8134-eba5-43b8-bcc9-bb4bc16c2548代表WPF。该   实线应如下所示:

     

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

     

(如果您对细节感兴趣,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}

答案 2 :(得分:0)

我想在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()是您想要显示的窗口