我是GUI开发的新手,我知道Winforms和WPF之间的转换以前已得到解决。但是,作为一个新手,我仍然不清楚最佳的前进方式,非常感谢您的帮助。

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

提前非常感谢大家的帮助!

最佳答案

我是GUI开发的新手


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


  在Winforms和WPF之间转换


问题不在于代码本身。问题在于编写它的心态:


WPF中绝对不需要后面所有的“传统” winforms代码。
在WPF中,有DataBinding(嗯,实际上winforms有一个叫做databinding的东西,但是与WPF(和winforms中的其他东西一样))可笑。 XAML,然后是DataBound到相关的Models和ViewModels,这就是为什么所需的心态存在巨大差异的原因。


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



WPF可视树比winforms X,Y方法复杂得多。因此,将某个UI元素深深地埋藏在其中,例如,将DataTemplate用作ItemsControl,而将DataTemplate用作CellTemplateDataGrid,这是您真正不需要的。想进入。相信我。

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


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


如果您要启动(或启动)新产品,请忘记Winforms。死了除了默认的丑陋东西外,它不支持其他任何东西。如果不借助大量可怕的技巧,就无法对其进行自定义/动画/美化。

每个人都会告诉您,winforms仅用于维护旧版应用程序,对于任何开始进行认真项目的人而言,不再是一种选择。


  但是,它是一个复杂而冗长的代码,而且我对Winforms相对比较满意


一旦学习了MVVM,您将很快意识到WPF需要在winforms中执行任何操作所需的代码的10%。您复杂而冗长的代码(可能在代码后面)将简化为Simple,Simple属性和INotifyPropertyChanged。这就是您在WPF中进行编码的方式。

关于c# - 将WinForms转换为WPF或将WPF转换为Winforms的效率更高,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17069009/

10-16 20:34