如何使WPF故障转移到WinForms

本文关键字:WinForms 转移 故障 何使 WPF | 更新日期: 2023-09-27 18:09:47

我正在编写一个可以在WPF或WinForm中运行的应用程序。这个想法是,如果Windows Presentation Foundation不在一个系统上(例如,一个较旧的服务器),我希望WPF故障转移到Winform。

我不希望"组合"它们,而是从WinForm中单独设计一个WPF表单。

这可能吗?

如何使WPF故障转移到WinForms

这没有意义。

  • 如果开发一个。net应用程序,目标是。net框架3.0或更高版本,那么WPF将会出现(它是。net框架的一部分)。

  • 如果你没有安装该版本,winforms应用程序也不会运行,如果它的目标是一个不存在的框架版本

  • 任何给定的。net应用程序都必须针对框架的特定版本,当然,该特定版本必须存在于它运行的机器中。

  • 如果你想要一些"回退"机制,你将不得不为同一个应用程序构建两个单独的版本,一个针对。net 2.0,另一个针对3.0或更高版本,然后它们将是相互无关的独立应用程序。

澄清:

如果。net Framework 4.0安装在一台给定的机器上,那么WPF就安装在那台机器上。从。net 3.0开始,WPF成为。net框架的一部分。

我认为这是不可能的工作太多。通常,windows会将start的所有依赖项加载到内存中,如果缺少依赖项,应用程序将崩溃。有选项可以让它延迟加载,但这是一个安静的艰苦的工作。

你可以用一个windows窗体的dll和一个WPF的dll来实现它。您可以在启动和加载时检查系统,而不是当前系统的GUI。

然而,我建议只写一个Windows窗体UI。要实现每一个思想的双重是不太有效的。

您计划为您的应用程序安装一个安装程序吗?如果是这样,你可以检查系统上安装了哪个版本的。net框架,然后决定安装哪个版本的应用程序。

为了重用你的一些代码,你可以有一个库,你的两个版本的应用程序都使用它来进行与表示无关的业务逻辑。

我实际上已经实现了一个程序,它同时具有WinForms和WPF用户界面。我首先实现了WinForms,然后在人们抱怨WinForms看起来"太90年代"时添加了WPF。目前,旧的UI仍然可以通过"-winforms"命令行选项使用。我使用MVVM,严格禁止在视图模型中使用WPF类;因此,大部分代码在两个版本之间共享。WinForms本身并不能很好地支持MVVM模式,但是我使用了Update Controls框架,它提供了自己独特的MVVM方法,作为一个位于WinForms之上的库(并且与WPF无缝集成)。

然而,你想做的是相当具有挑战性的。WPF附带。net 3.5(3.0?),所以你可能需要单独的可执行文件,一个用于。net 3.5,一个用于。net 2.0。(我不是100%确定,因为。net 3.5实际上仍然使用相同的2.0 CLR二进制文件;因此,在一个可执行文件中完成所有操作是可能的。)

但是为什么要这么麻烦呢?现在几乎所有的计算机都安装了。net 3.5,那些没有的可以升级。