将WinForms转换为WPF或将WPF转换为WinForms更有效

本文关键字:WPF 转换 WinForms 有效 或将 | 更新日期: 2023-09-27 18:18:16

我是GUI开发的新手,我知道Winforms和WPF之间的转换以前已经解决了。然而,作为一个新手,我仍然不清楚前进的最佳途径,我将非常感谢您的帮助。

我基本上有两个SDK示例代码,我试图结合。一个示例代码是用winforms编写的,另一个是用WPF编写的。当我设想我的最终产品包括动画时,我相信我应该把winforms代码翻译成WPF(如果你不同意,请纠正我)。然而,这是一个复杂而冗长的代码,因为我对winforms相对更熟悉,我想知道我是否应该考虑将WPF转换为winforms并使用Open GL控件。最有效的前进方式是什么?从winforms示例代码中,我需要来自DataGrid和WPF的数据,我需要访问当前显示在WindowsFormsHost上的512x512实时图像。

提前感谢大家的帮助!!

将WinForms转换为WPF或将WPF转换为WinForms更有效

我是GUI开发新手

我必须警告你WPF有一个非常陡峭的学习曲线。我想说的是,它不适合没有经验的人。

在Winforms和WPF之间转换

问题不在于代码本身。问题在于人们写这篇文章的心态:

  • 所有"传统"的winforms代码在WPF中是绝对不需要的。

  • 在WPF中,有DataBinding(好吧,实际上winforms有一些叫做DataBinding的东西,但与WPF相比,这是可笑的(就像winforms中的其他任何东西一样)。这完全消除了在过程代码中创建或操作任何UI元素的需要。一切都在XAML中定义,然后绑定到相关的模型和视图模型。这就是为什么这需要的心态有很大的不同。

    • 在winforms中,UI存储有关其状态的信息。为了读取/检索/修改这些信息,必须在代码中访问这些UI元素。
    • 在WPF中,ViewModel和Model(您创建的用于存储数据的简单类,并且根本不与UI绑定)存储此状态信息。为了读取/检索/修改这些信息,您不需要访问代码中的UI元素。

WPF可视化树比winforms X,Y方法复杂得多。因此,抓住一些深埋在其中的UI元素,比如DataTemplate用于ItemsControl, DataTemplate用于DataGridCellTemplate,这是你真的不想进入的东西。相信我。

我建议你阅读@Rachel的优秀解释和链接的博客文章,以更好地理解从笨拙,无聊,太多代码的winforms世界过渡到美丽,可定制,可扩展,令人愉快的XAML和数据绑定世界(适用于所有基于XAML的技术WPF, WinRT, Silverlight, Windows Phone等)所需的条件。

我设想我的最终产品包括动画

如果你要开始(或开始)一个新产品,忘记winforms。它死了。除了默认的丑陋的东西,它不支持任何东西。它不能自定义/动画/美化,而不诉诸大量可怕的黑客。

每个人都会告诉你,winforms只是为了维护遗留应用程序,而不再是任何开始任何严肃项目的人的选择。

然而,它是一个复杂和冗长的代码,因为我相对更舒适的winforms

一旦你学习了MVVM,你很快就会意识到WPF只需要10%的代码就可以在winforms中做任何事情。您的复杂和冗长的代码(可能是代码隐藏)将减少到Simple,简单属性和INotifyPropertyChanged

从winforms切换到WPF所节省的时间是值得的。我想不出你为什么要倒退(虽然不是说没有理由)。

您甚至可以使用windows窗体wpf包装器来完成此操作。然后,一旦你把所有的东西都转换好了,你就可以去掉所有的包装,它就会变成一个完整的wpf应用程序

关于WPF相对于winforms的优势的问题