Совершенно безопасно отображать окно WPF из формы WinForms? - PullRequest
11 голосов
/ 06 октября 2010

Я хотел бы отобразить окно WPF из приложения форм Windows (.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());

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

Ответы [ 3 ]

15 голосов
/ 06 октября 2010

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

Перед отображением окна WPF необходимо добавить вызов метода EnableModelessKeyboardInterop:

  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

7 голосов
/ 06 октября 2010

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

0 голосов
/ 06 октября 2010

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

...