2

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

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

非常感谢大家的帮助!!

4

2 回答 2

6

我是 GUI 开发新手

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

Winforms 和 WPF 之间的转换

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

  • WPF 中绝对不需要背后的所有“传统”winforms 代码。

  • 在 WPF 中,有DataBinding(嗯,实际上 winforms 有一种称为数据绑定的东西,但与 WPF 相比这是可笑的(就像 winforms 中的其他任何东西一样)。这完全消除了在程序代码中创建或操作任何 UI 元素的需要。一切都定义在XAML 然后 DataBound 到相关的模型和视图模型。这就是为什么在这种情况下所需的心态存在巨大差异的原因。

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

WPF 视觉树比 winforms X,Y 方法复杂得多。因此,掌握一些深深埋藏在其中的 UI 元素,比如说 a DataTemplateused for an ItemsControlwhich is inside a DataTemplateused as the CellTemplateof aDataGrid是你真的不想进入的东西。相信我。

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

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

如果您即将开始(或开始)新产品,请忘记 winforms。它死了。除了默认的丑陋的东西之外,它不支持任何东西。如果不求助于许多可怕的黑客,就无法对其进行自定义/动画/美化。

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

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

一旦你学习了 MVVM,你很快就会意识到 WPF 需要 10% 的代码来在 winforms 中做任何事情。您的复杂而冗长的代码(可能是代码隐藏)将被简化为简单、简单的属性和INotifyPropertyChanged. 这就是您在 WPF 中编码的方式。

于 2013-06-12T15:27:07.563 回答
2

通过 WPF 允许的分离节省的时间值得从 winform 切换。我想不出你应该倒退的理由(不过,并不是说没有理由。

您甚至可以使用windows forms wpf wrapper分块执行此操作。然后,一旦你把所有东西都转换了,你可以删除任何包装器,这将是一个完整的 wpf 应用程序

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

于 2013-06-12T15:11:51.130 回答