【问题标题】:Handling a WinForms button's Click event from a separate WPF application从单独的 WPF 应用程序处理 WinForms 按钮的 Click 事件
【发布时间】:2015-07-06 16:55:09
【问题描述】:

总结:所以我有两个应用程序:一个是WinForms,另一个是WPF。我试图弄清楚如何单击 WinForms 应用程序中的按钮并让 WPF 应用程序响应该单击。

因此,为了获得更详细的信息,我正在开发现有的 WinForms 应用程序,并添加新功能。对于其中一个功能,我需要创建一个单独的 WPF 应用程序,其中包含一个位于 WinForms 应用程序之上的 InkCanvas,并允许用户在 WinForms 应用程序上进行绘图。

我在 WinForms 应用程序上有 3 个用于控制 InkCanvas 的按钮:一个用于启用绘图,一个用于启用擦除,一个用于清除画布。我需要弄清楚的是如何在 WPF 应用程序中处理这 3 个按钮的 Click 事件。

我一直在研究诸如 PRISM 的 EventAggregator(尽管我不知道这是否可以在单独的进程之间工作)和 WCF 之类的东西。 WCF 似乎是我应该使用的,但我没有使用它的经验,所以它运行缓慢。我遇到过关于 WCF 双工服务的文章 (link)(link)

所以我想我的问题是:在单独的 WPF 应用程序中处理 WinForms 按钮的 Click 事件的最佳方法是什么?如果这个问题已经被问过或者太含糊,请提前道歉。

【问题讨论】:

  • 为什么不在 WinForms 应用程序中直接使用 WPF 控件呢?您可以使用ElementHost (msdn.microsoft.com/en-us/library/…) 控件托管 WPF 控件...
  • 我已经尝试过这样做。简而言之,透明度是我无法让它发挥作用的原因。基本上,每当我尝试使 ElementHost 的背景透明时,它都会在 WinForms 应用程序中呈现的 3D 场景中挖出一个洞。我一直无法弄清楚如何防止这种情况发生。几周前我在这里发布了一个关于这个确切问题的问题 (stackoverflow.com/questions/30508405/…)。
  • 您是否尝试过使用整个 WPF 窗口? stackoverflow.com/questions/8311956/…
  • 嗯,让我试一试...这是我还没有真正尝试过的一件事。
  • 天哪,这确实有效... 呃,当我只需要使用 WPF 窗口时,我觉得我已经浪费了几天试图让 WCF 工作。非常感谢您的帮助。现在,我该怎么处理这个问题?从技术上讲,您的建议回答了我的另一个问题(如果您想写下我上面链接的问题的答案,那就太好了)。

标签: c# .net wpf winforms wcf


【解决方案1】:

WinForms 可以使用内置于 Winforms 控件库中的 ElementHost 控件来承载 WPF 元素。如果这在这种情况下不起作用(因为您使用的是透明度),您可以尝试使用覆盖在应用程序顶部的新 WPF 窗口(请参阅Open WPF window in WindowsForm APP)。

通过这种方式,您可以连接事件处理程序和通信,而无需担心 IPC 方法或管理两个不同可执行文件之间的应用程序生命周期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多