从WPF应用程序打开WinForm?

时间:2013-05-16 00:25:42

标签: .net wpf winforms

我已经创建了一个WPF和WinForm应用程序,我需要做的是 从WPF应用程序打开WinForm。两者都在同一个解决方案中,但它们是不同的项目。

我尝试了以下内容:

Dim newWinForm as New MainWindow
newWinForm.show()

我从这里找到了一个可能的解决方案: Opening winform from wpf application programmatically

但我不明白我到底要做什么。我希望你能帮助我。谢谢!

3 个答案:

答案 0 :(得分:9)

通常,您需要在WindowInteropHelper中托管您的表单, 如下面的WPF窗口中的Button.Click事件处理程序:

C#:

private void button1_Click(object sender, RoutedEventArgs e) {
  Form1 form = new Form1();
  WindowInteropHelper wih = new WindowInteropHelper(this);
  wih.Owner = form.Handle;
  form.ShowDialog();
}

VB:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
    Dim form As New Form1()
    Dim wih As New WindowInteropHelper(Me)
    wih.Owner = Form.Handle
    form.ShowDialog()
End Sub

当然,您需要添加项目的引用/导入和System.Windows.Forms.dll

答案 1 :(得分:0)

假设您将这两个项目称为WPFAppWinFormApp

它们两个都声明一个MainWindow类,这是主应用程序窗口。

要从WinFormApp应用程序打开MainWindow WPFApp,只需在WPFApp项目上执行以下操作:

  1. 添加对WinFormApp项目的引用
  2. 添加对System.Windows.Forms的引用
  3. 创建一个新的WinFormApp.MainWindow对象
  4. 致电Show()

答案 2 :(得分:-1)

不可能从WPF应用程序加载获胜表格。 所以你可以这样:

1-在winform项目中创建一个用户控件,并将所有表单元素添加到用户控件中

public partial class myUserControl : UserControl, IDisposable 
{
...// All Form Code and element put here
}

2-创建一个wpf窗口并在其中放入一个网格:

<Grid Name="grid">

</Grid>

3-在Wpf窗口上的代码如下:

public partial class myWpfWindow: Window
{
    public myWpfWindow()
    {
        InitializeComponent();

        myUserControl = new myUserControl ();
        System.Windows.Forms.Integration.WindowsFormsHost winformHost = new 
             System.Windows.Forms.Integration.WindowsFormsHost();
        winformHost.Child = myUserControl;

        grid.Children.Add(winformHost);  // --> <Grid Name="grid">

    }

}

4-为项目添加两个引用:WindowsFormsIntegration, System.Windows.Forms