【问题标题】:Is it absolutely safe to display a WPF window from a WinForms form?从 WinForms 表单显示 WPF 窗口是否绝对安全?
【发布时间】:2010-10-06 08:03:43
【问题描述】:

我想从 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());

在我看来,这太容易令人难以置信了。这有什么缺点吗?这样做安全吗?

【问题讨论】:

    标签: c# wpf winforms .net-3.5 interop


    【解决方案1】:

    它有一个严重的缺点:无模式的 WPF 窗口会not get keyboard input

    在显示 WPF 窗口之前需要添加 EnableModelessKeyboardInterop 方法调用:

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

    ElementHost resides in WindowsFormsIntegration.dll.

    延伸阅读:http://msdn.microsoft.com/en-us/library/aa348549.aspx

    【讨论】:

      【解决方案2】:

      底线:是的。 我们有相当繁重的应用程序结合了 WPF 和 winforms:窗口、用户控件、模式对话框,你能想到的……它在医疗市场上工作。 我们陷入了一些黑暗的角落,一个是臭名昭著的 EnableModelessKeyboardInterop,另一个是让 WPF 窗口成为 Winforms 窗口的子窗口,您可以阅读Here

      【讨论】:

        【解决方案3】:

        其实就是这么简单。我想不出这样做有什么坏处。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-05
          • 2014-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多