【问题标题】:More efficient to convert WinForms to WPF or the WPF to Winforms将 WinForms 转换为 WPF 或 WPF 转换为 Winforms 更有效
【发布时间】:2015-03-11 07:09:39
【问题描述】:

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

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

非常感谢大家的帮助!!

【问题讨论】:

  • 在不了解您的经验、您正在谈论的示例代码或您正在尝试做什么的情况下,很难给出建议。
  • 我想从 Winforms 转换为 WPF 的代码来自 Samples/winformsSample 文件夹中的 [link] (naturalpoint.com/optitrack/downloads/developer-tools.html)。我对 C# 的经验很少,但感谢这个网站和 WPF in 24hrs book,我学得很快。我正在尝试将来自运动跟踪摄像机的数据(标记的 x、y 和 Z 位置数据,显示在 DataGridView 示例代码中)与实时图像数据相结合,以构建 3D 体积数据。谢谢你的帮助! @DourHighArch
  • 如果你不需要动画视觉效果或任何令人眼花缭乱的 UI,我建议你去 Winforms。它简单且开发时间更快。否则,如果您有团队,则必须确保您的团队成员了解 WPF。

标签: c# wpf winforms


【解决方案1】:

我是 GUI 开发新手

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

在 Winforms 和 WPF 之间转换

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

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

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

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

WPF 可视化树比 winforms X,Y 方法复杂得多。因此,掌握一些深深埋藏在其中的 UI 元素,假设 DataTemplate 用于 ItemsControl,它位于 DataTemplate 中,用作 DataGridCellTemplate 是你真的不知道的东西想进入。相信我。

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

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

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

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

但是它是一个复杂而冗长的代码,而且我对 winforms 相对更熟悉

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

【讨论】:

  • 反对者,想发表评论吗?你不喜欢我的回答这一事实并没有降低它的真实性。 winforms 是一只蹩脚的恐龙。
  • 谢谢@HighCore!我被卖了,WPF绝对是要走的路。我很欣赏学习曲线陡峭而且会很痛苦,但我认为这是值得的。可惜我还不能投票。
  • @Eskinder,您可以通过单击答案左上角的复选标记来感谢人们。您甚至会在您的个人资料中获得一个闪亮的新徽章。
  • @HighCore 我支持你,但我不同意你将 WinForms 描述为“已死”。它不支持任何东西 [...] 默认丑陋的东西。它不能自定义/动画/美化 [ ...]”。 WinForms 尤其适用于直接 UI 操作比设置 MVVM 工作量少的 RAD 任务。此外,对 WPF 的批评:基于 XAML 的数据绑定是无类型的,并且通常(根据我的经验)会导致很多运行时错误,直到它正常工作。如果工具允许您在没有 XAML 的情况下使用 WPF,我想我会更喜欢 WPF。
【解决方案2】:

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

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

SO question about advantages of WPF to winforms

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多