从WinForms表单显示WPF窗口绝对安全吗?

我想从Windows窗体应用程序(.NET 3.5)中显示一个WPF窗口。

此代码似乎在示例项目中没有任何问题:

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()); 

在我看来这太容易成为现实。 这有什么缺点吗? 这样做安全吗?

它有一个严重的缺点:无模式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

底线:是的。 我们有非常繁重的应用程序结合WPF和winforms:窗口,用户控件,modal dialog,你的名字……它在医疗市场中工作。 我们进入了一些黑暗的角落,一个是臭名昭着的EnableModelessKeyboardInterop,另一个是让WPF窗口成为Winforms窗口的子窗口,你可以在这里阅读

这真的很简单。 我不能想到这样做的任何缺点。