【问题标题】:.NET WPF: Problems repeatedly calling WPF form from a WinForm application.NET WPF:从 WinForm 应用程序重复调用 WPF 表单的问题
【发布时间】:2011-07-21 17:57:38
【问题描述】:

正如标题所述,我多次从 WinForm 应用程序调用 WPF 表单(调用堆栈上有几个类)。最初,WPF 只工作一次。经过一番谷歌搜索,我发现我必须将 ShutdownMode.OnExplicitShutdown 添加到 WPF 应用程序创建中。

现在,添加后,在退出第一个 WPF 表单时,控制永远不会从“运行”调用返回,并且焦点会返回到 WinForm 对话框。如果我退出它,我最终会从 WPF 运行中返回控制权。

Winform:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainForm form = new MainForm();
Application.Run(form);

WPF 预初始化:

application = new System.Windows.Application
{
    ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown
};

调用 WPF 表单:

ConfirmForm form = new ConfirmForm();
application.Run(form);

这里发生了什么?:

【问题讨论】:

    标签: .net wpf winforms


    【解决方案1】:

    Application.Run(在 WinForms 和 WPF 中)是一个阻塞调用,它运行消息循环并在应用程序准备退出时返回。

    您应该只调用Show(),它会显示FormWindow 并立即返回。

    但是,您需要调用 ElementHost.EnableModelessKeyboardInterop 来告诉 WPF 使用 WinForms 消息循环。

    【讨论】:

    • 实际上,我希望 WPF 表单是模态和阻塞的,但只是尝试了 ShowDialog() 并且似乎工作正常。 :)
    • 如果你打电话给ShowDialog(),你不需要EnableModelessKeyboardInterop
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多