Действительно ли безопасно отображать окно WPF из формы WinForms?

Я хотел бы отобразить окно WPF из приложения Windows Forms (.NET 3.5).

Этот код работает без проблем в примере проекта:

public partial class WinFormsForm1 : Form
{
    public WinFormsForm1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      WpfWindow1 w = new WpfWindow1();
      w.Show();
    }
}

Форма начинается с Main() в виде обычной формы Winforms:

Application.Run(new WinFormsForm1());

Мне кажется, что это слишком легко, чтобы быть правдой. Есть ли недостатки в этом? Безопасно ли это делать?

Ответ 1

У него есть один серьезный недостаток: безмодовое окно WPF не получит ввод с клавиатуры.

Вызов метода EnableModelessKeyboardInterop должен быть добавлен до отображения окна WPF:

  WpfWindow1 w = new WpfWindow1();
  System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(w);
  w.Show();

ElementHost находится в файле WindowsFormsIntegration.dll.

Дополнительная литература: http://msdn.microsoft.com/en-us/library/aa348549.aspx

Ответ 2

Итог: это так. У нас довольно сложное приложение, объединяющее как WPF, так и winforms: окна, пользовательские элементы управления, модальные диалоги, вы называете это... и работает на медицинском рынке. У нас есть некоторые темные углы, один из них - позорный EnableModelessKeyboardInterop, другой - окно WPF, являющееся дочерним положением окна Winforms, которое вы можете прочитать Здесь

Ответ 3

Это действительно так просто. Я не могу придумать, чтобы любой недостаток делал это таким образом.