Открыть WinForm из приложения WPF?

Я создал приложение WPF и WinForm, что мне нужно сделать, это откройте WinForm из приложения WPF. Оба находятся в одном решении, но это разные проекты.

я попробовал следующий:

Dim newWinForm as New MainWindow
newWinForm.show()

Я нашел возможное решение здесь: Открытие winform из приложения wpf программно

но я не понимаю, что именно я должен сделать. Надеюсь, вы сможете мне помочь. Спасибо!

2 ответов


Как правило, вам нужно разместить свою форму в WindowInteropHelper, как следовать в кнопке окна WPF.Щелкните обработчик событий:

C#:

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

В. Б.:

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

и, конечно, вам нужно добавить ссылку / импорт вашего проекта и системы.Окна.Формы.dll файлы


невозможно загрузить форму win из приложения 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