如何使WPF故障转移到WinForms
本文关键字:WinForms 转移 故障 何使 WPF | 更新日期: 2023-09-27 18:09:47
我正在编写一个可以在WPF或WinForm中运行的应用程序。这个想法是,如果Windows Presentation Foundation不在一个系统上(例如,一个较旧的服务器),我希望WPF故障转移到Winform。
我不希望"组合"它们,而是从WinForm中单独设计一个WPF表单。
这可能吗?
这没有意义。
-
如果开发一个。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,那些没有的可以升级。