wpf - 有没有办法直接在 WPF 应用程序中运行 winforms exe?

标签 wpf vb.net winforms

我有一个旧的 Windows Mobile 应用程序,老板希望在 Windows 7 上运行。由于它都是 .NET,因此该应用程序可以在 Windows 上运行(我相信它是为 Windows CE 制作的),但它运行在小 window 。我想把它搞砸,第一个想到的是以某种方式将实际程序转储到 WPF Viewbox 中。这将相当简单,并且不会影响任何其他应用程序的大小。

搜索我看到的所有内容都是有关 WindowFormsHost 的信息,用于将 WinForms 用户控件放入 WPF,但没有任何关于完整可执行文件的信息。有谁知道是否有办法做到这一点?

最佳答案

Viewbox 仅适用于纯 WPF 控件。您不能使用它来放大 WinForms 控件,因为 WinForms 控件对 WPF 的缩放变换一无所知。

您可以尝试使用 WinForms Control.DrawToBitmap 来破解一些东西。方法:将WinForms控件绘制为位图,然后放大位图并将其绘制到屏幕上。 (不需要 WPF;您可以在纯 WinForms 中执行此操作。)但是 DrawToBitmap 有 serious limitations 。如果您希望您的应用程序响应鼠标或键盘,您需要做很多工作,将鼠标和键盘事件转发到原始控件,自己跟踪焦点等等。也许理论上是可能的,但几乎可以肯定不实用。

可以将一个 .NET EXE 加载到另一个 .NET EXE 中。 EXE 是像 DLL 一样的程序集,您可以使用 Assembly.Load 加载它们。 ,甚至在解决方案资源管理器中添加引用。但你不需要做任何异国情调的事情;您可以轻松地将所有源代码编译到您的主机 EXE 中。

您最好的选择可能就是在表单设计器中打开每个表单并将所有控件放大。在大型应用程序中,这可能需要做大量工作,但没有任何规定您必须一次完成所有工作,而且它可能比任何替代方案都要少。

关于wpf - 有没有办法直接在 WPF 应用程序中运行 winforms exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870702/

相关文章:

c# - 将空项目添加到有界组合框

c# - 一般拖放 ListBoxItems

javascript - Winforms 相当于 javascript setTimeout

wpf - DataGridCell BorderBrush 不工作

c# - 在 vb.net 或 c# 中寻找算法,但我不知道它的名字!

vb.net - 生成 9 位随机数,包括前导零

.net - 在用户控件中使用集合时 Resx 无效

winforms - WinForms 开发技巧对 future Web 开发的思考

c# - 表单加载时未设置表单图形

c# - 将 MVVM 与 CollectionViewSource 一起使用