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

Mar*_*rek 11 c# wpf interop .net-3.5 winforms

我想从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();
    }
}
Run Code Online (Sandbox Code Playgroud)

表单从Main()正常的Winforms表单开始:

Application.Run(new WinFormsForm1());
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*rek 15

它有一个严重的缺点:无模式WPF窗口不会得到键盘输入.

所述EnableModelessKeyboardInterop方法调用需要示出了WPF窗口之前加入:

  WpfWindow1 w = new WpfWindow1();
  System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(w);
  w.Show();
Run Code Online (Sandbox Code Playgroud)

ElementHost 驻留在WindowsFormsIntegration.dll中.

进一步阅读:http://msdn.microsoft.com/en-us/library/aa348549.aspx


Ami*_*ira 7

底线:是的.我们有相当重的应用程序结合WPF和winforms:窗口,用户控件,模态对话框,你命名它......它在医疗市场工作.我们进入了一些黑暗的角落,一个是臭名昭着的EnableModelessKeyboardInterop,另一个是让WPF窗口成为Winforms窗口的子窗口,你可以在这里阅读