将Winform应用程序转换为WPF应用程序

时间:2013-09-23 21:09:04

标签: c# .net wpf winforms xaml

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

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

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

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

5 个答案:

答案 0 :(得分:27)

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

即使你可以,也不应该。

  

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

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

不使用XAML比使用XAML麻烦得多。它起初可能看起来令人生畏,但这是一件非常棒的事情。

  

当然,使用Winforms时没有任何XAML

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

  

我可以为我用于的WPF应用程序使用相同的代码吗?   winforms应用程序并得到相同的结果?

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

  

考虑到过去使用Winforms的经验,我应该以某种方式   改变我对设计和实施的思考方式   为Winforms工作,但不适合WPF吗?

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

我强烈建议您阅读有关从winforms升级到WPF的Rachel's Excellent Post

答案 1 :(得分:3)

我尝试直接将Winforms应用程序转换为WPF,这会导致问题超出您的需求,因为您一直在与框架作斗争。阅读MVVM和数据绑定并使用它。它是WPF的设计,具有可测试性等几个优点。实际上,您可以通过一些简单的概念(数据绑定,视图模型等)获得相当长的路径,并随时扩展您的知识,但我建议首先了解MVF和数据绑定。

一个很好的入门框架将是MVVMLight,但它值得编写基础知识而不需要框架来了解事情的工作原理。

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

答案 2 :(得分:2)

尝试在没有XAML的情况下创建WPF控件会遇到麻烦 - 整个框架是围绕MVVM模式构建的,这需要以声明方式而不是程序化方式描述View。虽然你绝对可以在C#和XAML中创建相同的UI对象,但是在C#中这样做会要求你知道(真正令人难以理解的细节)框架的运行方式,以便在UI状态发生变化时进行补偿。另一方面,如果你这样做XAML(正如WPF所规定的那样),那么事情通常会更新,并且无需解决无尽的错误。简而言之,“是”你可以在代码中执行,但“不”你不能在代码中执行它而不会失去理智。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我将获得第二或第三或第四个答案。永远不会永远尝试用“Winforms风格”代码构建WPF应用程序。我在我的第一个WPF应用程序上做到了这一点,这是我做过的最大的错误。真是一场巨大的混乱。第二个应用程序我走向MVVM中途,这也是一个巨大的混乱。第三个应用程序,自从我已经通过WPF一书100%MVVM,DI等100%以来,代码非常干净。

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

之后你会感谢我们,因为WPF最伟大的概念之一是UI和业务逻辑的分离。这使控制换掉了一块蛋糕。