C# 如何将WPF故障转移到WinForms

C# 如何将WPF故障转移到WinForms,c#,.net,wpf,winforms,wpf-4.0,C#,.net,Wpf,Winforms,Wpf 4.0,我正在编写一个将使用WPF或WinForm运行的应用程序。这个想法是,如果Windows演示基金会不在系统上(比如说旧服务器),我希望WPF故障转移到WINFALSE。< /P> 我不想把它们“组合”起来,而是想把WPF表单与WinForm分开设计 这可能吗?我认为这是不可能的,需要做很多工作。通常windows会在启动时将所有依赖项加载到内存中,如果缺少依赖项,则应用程序将崩溃。有一些选项可以让它延迟加载,但这是一项安静而艰苦的工作 您可以使用一个适用于windows窗体的dll和另一个适用于

我正在编写一个将使用WPF或WinForm运行的应用程序。这个想法是,如果Windows演示基金会不在系统上(比如说旧服务器),我希望WPF故障转移到WINFALSE。< /P> 我不想把它们“组合”起来,而是想把WPF表单与WinForm分开设计


这可能吗?

我认为这是不可能的,需要做很多工作。通常windows会在启动时将所有依赖项加载到内存中,如果缺少依赖项,则应用程序将崩溃。有一些选项可以让它延迟加载,但这是一项安静而艰苦的工作

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


不过,我建议只编写一个Windows窗体UI。实施每一个“双思”并不是很有效。

我认为这是不可能的,需要做很多工作。通常windows会在启动时将所有依赖项加载到内存中,如果缺少依赖项,则应用程序将崩溃。有一些选项可以让它延迟加载,但这是一项安静而艰苦的工作

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


不过,我建议只编写一个Windows窗体UI。实施每一个双重思考都不是很有效。

这没有意义

  • 如果开发一个以.Net Framework 3.0或更高版本为目标的.Net应用程序,则会出现WPF(它是.Net Framework的一部分)

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

  • 任何给定的.Net应用程序都必须以框架的特定版本为目标,当然,该特定版本必须存在于运行该框架的计算机中

  • 如果需要某种“回退”机制,则必须构建同一应用程序的两个独立版本,一个针对.Net 2.0,另一个针对3.0或更高版本,这两个版本将是相互无关的独立应用程序

澄清:


如果在给定的机器上安装了.NETFramework 4.0,那么WPF就安装在该机器上。WPF是从.Net 3.0开始的.Net框架的一部分。

这没有意义

  • 如果开发一个以.Net Framework 3.0或更高版本为目标的.Net应用程序,则会出现WPF(它是.Net Framework的一部分)

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

  • 任何给定的.Net应用程序都必须以框架的特定版本为目标,当然,该特定版本必须存在于运行该框架的计算机中

  • 如果需要某种“回退”机制,则必须构建同一应用程序的两个独立版本,一个针对.Net 2.0,另一个针对3.0或更高版本,这两个版本将是相互无关的独立应用程序

澄清:


如果在给定的机器上安装了.NETFramework 4.0,那么WPF就安装在该机器上。WPF是从.Net 3.0开始的.Net Framework的一部分。

您是否计划为您的应用程序安装一个安装程序?如果是这样,您可以检查系统上安装了哪个版本的.NET framework,然后确定要安装哪个版本的应用程序


要重用部分代码,您可以拥有一个库,应用程序的两个版本都使用该库来处理与演示文稿无关的业务逻辑。

您是否计划为应用程序安装一个安装程序?如果是这样,您可以检查系统上安装了哪个版本的.NET framework,然后确定要安装哪个版本的应用程序


为了重用一些代码,您可以拥有一个库,应用程序的两个版本都使用该库来处理与演示文稿无关的业务逻辑。

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

然而,你想做的是相当有挑战性的。WPF附带了.NET3.5(3.0?),因此您可能需要单独的可执行文件,一个用于.NET3.5,一个用于2.0。(我不能100%确定这一点,因为.NET3.5实际上仍然使用相同的2.0CLR二进制文件;因此,不知何故,可以在一个可执行文件中完成这一切。)


但是为什么要这么麻烦呢?现在几乎所有的计算机都有.NET 3.5,没有的可以升级。

我实际上实现了一个既有WinForms又有WPF用户界面的程序。我首先实现了WinForms,然后当人们抱怨WinForms看起来“太90后”时,我添加了WPF。目前,旧UI仍然可以使用“-winforms”命令行选项。我使用MVVM时有一条严格的规则,禁止在viewmodel中使用WPF类;因此,大部分代码在两个版本之间共享。WinForms本身并不很好地支持MVVM模式,但我使用的框架提供了自己独特的MVVM方法,作为一个位于WinForms之上的库(并与WPF无缝集成)

然而,你想做的是相当有挑战性的。WPF附带了.NET3.5(3.0?),所以您可能需要单独的可执行文件,一个用于