将 Winform 应用程序转换为 WPF 应用程序
Posted
技术标签:
【中文标题】将 Winform 应用程序转换为 WPF 应用程序【英文标题】:Convert a Winform application to WPF application 【发布时间】:2013-09-28 22:05:25 【问题描述】:我有一个用 WinForms 制作的小程序,现在我想用 WPF 再次制作它。
我是 WPF 的新手,我读到无论您可以使用 XAML 做什么,您也可以不使用它,即仅使用代码。
当然,您在使用 Winforms 时没有任何 XAML。我可以对 WPF 应用程序使用与 winforms 应用程序相同的代码并获得相同的结果吗?还是我需要创建和编辑 XAML?使用或不使用 XAML 有什么好处?
另外,考虑到过去使用 Winforms 的经验,我是否应该以某种方式改变我对适用于 Winforms 但不适用于 WPF 的设计和实现的思考方式?
【问题讨论】:
为什么要在 WPF 中重新创建它? @SystemDown 正如您从我的问题中意识到的那样,我对 WPF 还是很陌生,我知道您可以使用 WPF 让一切看起来更好。如果不是为了一些非常小的、非专业的东西,几乎没有人仍然使用 Winforms 创建,我想更多地研究 WPF。 因为这将是学习经验,所以我会从头开始重新创建东西。您将学到更多知识并避免直接翻译可能让您陷入的任何陷阱。 您不能重用 winforms 代码,因为 WPF 控件是不同的类。使用 C# 还是 XAML 都没有关系 【参考方案1】:不,您不能在 WPF 中重用 winforms 中的代码。
即使可以,也不应该。
你可以用 XAML 做什么,你也可以不用它
您应该真正使用 XAML 来定义 UI,然后使用 DataBinding 和 MVVM,这是一种比传统的过程式 winforms 方法更专业的开发方式。
不使用 XAML 比使用它麻烦得多。一开始可能看起来很吓人,但使用起来真的很棒。
当然你在使用 Winforms 时没有任何 XAML
不,当然不是。 winforms 是一种非常古老的技术,不支持任何东西。这就是他们创建 Visual Studio 设计器的原因,否则没有人会使用 winform 来做任何事情,因为做任何有用的事情都需要大量的代码。
我可以在 WPF 应用程序中使用与我在 winforms 应用程序并得到相同的结果?
可能,通过调整一些类名和诸如此类的东西,但是你失去了 WPF 提供的主要优势,这正是摆脱了可怕的类似 winforms 的代码。
考虑到过去使用 Winforms 的经验,我应该以某种方式 改变我对设计和实现的思考方式 为 Winforms 工作但不适合 WPF?
是的。 WPF 支持 MVVM,这需要与传统 winforms 方法完全不同的思维方式。
我强烈建议阅读 Rachel's Excellent Post 关于从 winforms 升级到 WPF。
【讨论】:
我注意到你链接的帖子有一些关于你写的一切的链接。您可能有一些文章链接或您推荐的不属于您自己的链接吗?我开始在wpftutorial.net阅读教程,你知道这是否也是一个好的来源吗? @YonatanNir 首先,我建议通过 Rachel 的材料(上面链接)。 Winforms 支持 MVVM,我使用 ReactiveUI,我可以在 WPF 中重用 Winforms 中的 ViewModel。 @Luis 是的,请给我看一下相当于 WPF 的ItemsControl
的 winform。【参考方案2】:
我尝试将 Winforms 应用程序直接转换为 WPF,但它导致的问题比您需要的要多得多,因为您一直在与框架作斗争。阅读 MVVM 和数据绑定并使用它。它是围绕 WPF 设计的,并具有可测试性等几个优点。实际上,您可以通过一些简单的概念(数据绑定、视图模型等)获得很长的路要走,并在进行过程中扩展您的知识,但我建议您首先了解 MVVM 和 WPF 中的数据绑定。
MVVMLight 是一个很好的入门框架,但值得在没有框架的情况下编写基础知识以首先了解事物的工作原理。
我似乎记得这是 reed copsey 的一组好帖子:http://reedcopsey.com/series/windows-forms-to-mvvm/
【讨论】:
我从wpftutorial.net 开始阅读教程,你知道这是否是关于该主题的好资料吗?【参考方案3】:试图在没有 XAML 的情况下创建 WPF 控件是自找麻烦 - 整个框架是围绕 MVVM 模式构建的,该模式要求以声明方式而不是程序方式描述您的视图。虽然您绝对可以在 C# 和 XAML 中创建相同的 UI 对象,但在 C# 中这样做需要您了解(非常详细地)框架如何运行,以便在您的 UI 状态发生变化时进行补偿。另一方面,如果您执行 XAML(正如 WPF 要求的那样),那么事情通常会更新得很好,而无需解决无休止的错误。简而言之,“是”你可以在代码中做到这一点,但“不”你不能在不失去理智的情况下在代码中做到这一点。
【讨论】:
【参考方案4】:实际上,这取决于您的项目有多复杂。对于相当小的项目,您可以非常简单地进行这种“转换”。但这不是一个好的做法,因为 WPF 开发通常基于 MVVM/Prism 并且它们为您提供了很多优势。 此外,您的 UI 的行为可能会有所不同 - 这取决于您的项目的复杂性。
【讨论】:
【参考方案5】:我将在其他答案中排名第二或第三或第四。永远,永远,永远,永远尝试使用“Winforms 样式”代码构建 WPF 应用程序。我在我的第一个 WPF 应用程序中做到了这一点,这是我犯过的最大错误。多么巨大的混乱。第二个应用程序我半路走向 MVVM,那也是一团糟。第 3 个应用程序,自从我 100% 使用 MVVM、DI 等,并且 100% 使用 WPF 和代码后,代码非常干净。
以任何方式将 Winforms 代码移植到 WPF 并没有任何意义。当您使用 WPF 时,您在 Winforms 中编写的大部分代码都会被丢弃。基本上,唯一可移植的东西是业务逻辑。所有的 UI 逻辑都完全不同。
您稍后会感谢我们,因为 WPF 有史以来最伟大的概念之一就是 UI 和业务逻辑的分离。这使得换出控件变得轻而易举。
【讨论】:
以上是关于将 Winform 应用程序转换为 WPF 应用程序的主要内容,如果未能解决你的问题,请参考以下文章