21

我有一个用 WinForms 制作的小程序,现在我想用 WPF 再次制作它。

我是 WPF 的新手,我读到无论您可以使用 XAML 做什么,您也可以不使用它,这意味着仅使用代码。

当然,您在使用 Winforms 时没有任何 XAML。我可以对 WPF 应用程序使用与 winforms 应用程序相同的代码并获得相同的结果吗?还是我需要创建和编辑 XAML?使用或不使用 XAML 有什么好处?

另外,考虑到过去使用 Winforms 的经验,我是否应该以某种方式改变我对适用于 Winforms 但不适用于 WPF 的设计和实现的思考方式?

4

5 回答 5

31

不,您不能在 WPF 中重用 winforms 中的代码。

即使可以,也不应该。

无论你可以用 XAML 做什么,你也可以不用它

你真的应该使用 XAML 来定义 UI,然后使用DataBindingMVVM,这是一种比传统的过程式 winforms 方法更专业的开发方式。

不使用 XAML 比使用它麻烦得多。起初它可能看起来很吓人,但它是一个非常棒的东西。

当然你在使用 Winforms 时没有任何 XAML

不,当然不是。winforms 是一种非常古老的技术,不支持任何东西。这就是他们创建 Visual Studio 设计器的原因,否则没有人会使用 winform 来做任何事情,因为做任何有用的事情都需要大量的代码。

我可以对 WPF 应用程序使用与 winforms 应用程序相同的代码并获得相同的结果吗?

可能,通过调整一些类名和诸如此类的东西,但是你失去了 WPF 提供的主要优势,这正是摆脱了可怕的类似 winforms 的代码。

考虑到过去使用 Winforms 的经验,我是否应该以某种方式改变我对适用于 Winforms 但不适用于 WPF 的设计和实现的思考方式?

是的。WPF 支持 MVVM,这需要与传统的 winforms 方法完全不同的心态。

我强烈推荐阅读Rachel关于从 winforms 升级到 WPF的优秀文章。

于 2013-09-23T21:14:45.327 回答
3

我尝试将 Winforms 应用程序直接转换为 WPF,但它导致的问题比你需要的要多,因为你一直在与框架作斗争。阅读 MVVM 和数据绑定并使用它。它是围绕 WPF 设计的,并具有可测试性等几个优点。实际上,您可以通过一些简单的概念(数据绑定、视图模型等)获得很长的路要走,并在进行过程中扩展您的知识,但我建议您首先了解 MVVM 和 WPF 中的数据绑定。

一个很好的入门框架是 MVVMLight,但它值得在没有框架的情况下编写基础知识来了解事情是如何工作的。

我似乎记得这是 reed copsey 的一组很好的帖子:http: //reedcopsey.com/series/windows-forms-to-mvvm/

于 2013-09-23T21:18:30.670 回答
2

试图在没有 XAML 的情况下创建 WPF 控件是自找麻烦 - 整个框架是围绕 MVVM 模式构建的,该模式要求以声明性方式而不是程序方式描述您的视图。虽然您绝对可以在 C# 和 XAML 中创建相同的 UI 对象,但在 C# 中这样做需要您了解(非常详细地)框架如何运行,以便在您的 UI 状态发生变化时进行补偿。另一方面,如果您执行 XAML(正如 WPF 要求的那样),那么事情通常会更新得很好,而无需解决无休止的错误。简而言之,“是”你可以在代码中做到这一点,但“不”你不能在不失去理智的情况下在代码中做到这一点。

于 2013-09-23T21:14:37.043 回答
1

实际上,这取决于您的项目有多复杂。对于相当小的项目,您可以非常简单地进行这种“转换”。但这不是一个好习惯,因为 WPF 开发通常基于 MVVM/Prism,它们为您提供了很多优势。此外,您的 UI 的行为可能会有所不同 - 这取决于您项目的复杂性。

于 2013-09-25T12:48:38.257 回答
1

我将在其他答案中排名第二或第三或第四。永远,永远,永远,永远尝试使用“Winforms 样式”代码构建 WPF 应用程序。我在我的第一个 WPF 应用程序中做到了这一点,这是我犯过的最大错误。多么巨大的混乱。第二个应用程序我半路走向 MVVM,那也是一团糟。第 3 个应用程序,自从我使用 100% MVVM、DI 等以及 100% 的 WPF 和代码以来,它非常干净。

以任何方式将 Winforms 代码移植到 WPF 没有任何意义。当您使用 WPF 时,您在 Winforms 中编写的大部分代码都会被丢弃。基本上,唯一可移植的东西是业务逻辑。所有的 UI 逻辑都完全不同。

稍后您会感谢我们,因为关于 WPF 的最伟大的概念之一就是 UI 和业务逻辑的分离。这使得换出控件变得轻而易举。

于 2018-03-26T22:54:14.453 回答