正如标题所述,我从WinForm应用程序(在调用堆栈之间有多个类)中多次调用WPF表单。最初,WPF只工作过一次。经过一些谷歌搜索,我发现我必须将ShutdownMode.OnExplicitShutdown添加到WPF应用程序创建。
现在,在添加之后,在退出第一个WPF表单时,控件永远不会从“运行”调用返回,并且焦点将返回到WinForm对话框。如果我退出,我终于从WPF运行返回控制。
Winform的:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainForm form = new MainForm();
Application.Run(form);
WPF pre-init:
application = new System.Windows.Application
{
ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown
};
调用WPF表单:
ConfirmForm form = new ConfirmForm();
application.Run(form);
这里发生了什么?:
答案 0 :(得分:3)
Application.Run
(在WinForms和WPF中)是一个阻塞调用,它运行消息循环,并在应用程序准备退出时返回。
您应该致电Show()
,其中会显示Form
或Window
并立即返回。
但是,您需要调用ElementHost.EnableModelessKeyboardInterop
告诉WPF使用WinForms消息循环。