Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更有效地将WinForms转换为WPF或将WPF转换为WinForms_C#_Wpf_Winforms - Fatal编程技术网

C# 更有效地将WinForms转换为WPF或将WPF转换为WinForms

C# 更有效地将WinForms转换为WPF或将WPF转换为WinForms,c#,wpf,winforms,C#,Wpf,Winforms,我是GUI开发新手,我知道Winforms和WPF之间的转换以前已经讨论过了。然而,作为一名新手,我仍然不清楚前进的最佳道路,我将非常感谢您的帮助 我基本上有两个SDK示例代码,我正在尝试组合。一个示例代码用winforms编写,另一个用WPF编写。由于我设想我的最终产品包括动画,我相信我应该将winforms代码翻译成WPF(如果你不同意,请纠正我)。然而,这是一个复杂和冗长的代码,因为我相对比较舒服WiFrm,我想知道我是否应该考虑WPF到WiFrand翻译,并使用一个开放的GL控件。最有效

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

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


非常感谢大家的帮助

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

您甚至可以使用来完成这项工作。然后,一旦您转换了所有内容,您就可以删除任何包装,它将成为一个完整的wpf应用程序

我是GUI开发新手

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

Winforms和WPF之间的转换

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

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

  • 在WPF中,有数据绑定(实际上winforms有一种叫做数据绑定的东西,但与WPF相比,这很可笑(就像winforms中的其他东西一样)。这完全消除了在过程代码中创建或操作任何UI元素的需要。所有内容都是在XAML中定义的,然后数据绑定到相关模型和ViewModels。这就是为什么对此所需的思维方式存在巨大差异的原因

    • 在winforms中,UI存储有关其状态的信息。为了读取/检索/修改此信息,您必须在代码中访问这些UI元素
    • 在WPF中,ViewModel和Model(您创建用于存储数据的简单类,它们与UI完全无关)存储此状态信息。为了读取/检索/修改此信息,您不访问代码中的UI元素
WPF可视化树比winforms X,Y方法复杂得多。因此,掌握一些深埋其中的UI元素,比如说用于
ItemsControl的
DataTemplate
,它位于用作
DataGrid
CellTemplate
中你真的不想进去,相信我

我建议您阅读@Rachel的和链接的博客文章,以便更好地理解从笨拙、枯燥、太多代码的winforms世界过渡到美丽、可定制、可扩展、愉快的XAML和数据绑定世界(适用于所有基于XAML的技术WPF、WinRT、Silverlight、Windows Phone等)所需的内容

正如我设想的那样,我的最终产品将包括动画

如果你即将开始(或开始)一个新产品,忘记winforms吧。它已经死了。除了默认的丑陋的东西之外,它不支持任何东西。如果不借助大量可怕的黑客,它就无法进行定制/动画/美化

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

然而,这是一个复杂而冗长的代码,因为我对winforms比较熟悉


一旦您了解了MVVM,您将很快意识到WPF需要10%的代码才能在winforms中执行任何操作将简化为简单、简单的属性和
INotifyPropertyChanged
。这就是您在WPF中编写代码的方式。

Downvoter,是否愿意发表评论?您不喜欢我的答案这一事实并不会降低它的真实性。winforms是一只蹩脚的恐龙。谢谢您@HighCore!我被说服了,WPF肯定是一条路要走。我欣赏学习曲线的陡峭这将是痛苦的,但我认为这是值得的。很遗憾我还不能投票。@Eskinder,你通过点击答案左上角的复选标记来感谢人们。你甚至会在你的个人资料中得到一个闪亮的新徽章。@HighCore我投票超过了你,但我不同意你对WinForms的描述“死了。它不支持任何[…]默认丑陋的东西。它不能被定制/设置动画/美化[…]”。WinForms特别适合于RAD任务,在这些任务中,直接的UI操作比设置MVVM工作量要少。此外,对基于WPF:XAML的数据绑定的批评是非类型化的,而且经常(根据我的经验)在运行前会导致大量运行时错误。如果该工具允许您在不使用XAML的情况下使用WPF,我想我会更喜欢WPF。在不了解您的经验、您正在谈论的示例代码或您正在尝试执行的操作的情况下,很难给出建议。我想从Winforms转换为WPF的代码来自[link]()在Samples/winformsSample文件夹中。我对C#几乎没有经验,但多亏了这个网站和《24小时手册》中的WPF,我学得很快。我正在尝试组合来自运动跟踪摄像机的数据(标记的x、y和Z位置数据,显示在DataGridView示例代码中)使用实时图像数据构建3D体积数据。感谢您的帮助!@dourhigharchi如果您不需要动画视觉效果或任何令人眼花缭乱的UI,我建议您使用Winforms。它简单且开发速度更快