É absolutamente seguro exibir uma janela do WPF de um formulário do WinForms?

Gostaria de exibir uma janela do WPF de um aplicativo de formulários do Windows (.NET 3.5).

Este código parece funcionar sem nenhum problema em um projeto de amostra:

public partial class WinFormsForm1 : Form { public WinFormsForm1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { WpfWindow1 w = new WpfWindow1(); w.Show(); } } 

O formulário é iniciado a partir do Main() como um formulário normal do Winforms:

 Application.Run(new WinFormsForm1()); 

Isso me parece fácil demais para ser verdade. Há alguma deficiência nisso? Isso é seguro?

Ele tem uma falha grave: a janela do WPF não teria input de teclado .

A chamada do método EnableModelessKeyboardInterop precisa ser adicionada antes que a janela do WPF seja mostrada:

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

ElementHost reside no WindowsFormsIntegration.dll .

Outras leituras: http://msdn.microsoft.com/pt-br/library/aa348549.aspx

Resumindo: é. Temos uma aplicação muito pesada combinando WPF e winforms: janelas, controles de usuário, diálogos modais, o nome dele … e está funcionando no mercado médico. Entramos em alguns cantos escuros, um é o infame EnableModelessKeyboardInterop, outro é ter a janela do WPF como filha da janela do WinForms, que você pode ler aqui

É realmente assim tão simples. Eu não consigo pensar em nenhuma desvantagem de fazer isso dessa maneira.