将WinForm转换为WPF窗口
有这么难吗?我花了大约6个小时来阅读和观看WPF上的一些学习资源,然后在WPFwindow上重新创建表单。从视觉上看,这似乎是我最需要的,看图片。然而,获取所有的组合框、复选框、文本框等。充满保存的数据,并在数据发生变化时根据需要做出反应,这被证明是一个挑战。为什么开发人员不能像WinForm控件在创建WPF时那样,对属性、方法和事件使用相同的命名过程呢?我已经断断续续地做了3天了,现在只完成了大约75%。我有大约90个这样的表单需要最终转换,一些不太复杂,一些有更多的控件。现在,你可能会问,为什么我做这个练习是徒劳的?嗯,由于WinForms在窗口字体缩放设置为100%以外的情况下,在租用显示器上使用时并不总是正确地调整大小,我发现有必要走这条路。
如果任何人对如何更快/更顺利地完成这项工作有任何建议,请随时插话。
**** Hidden Message ***** 杰夫,当我开始和WPF一起工作时,我经历了同样的挫折。作为长期的Autocad程序员,我相信我们大多数人更习惯于赢得形式。我们通常会跳到UI中,快速构建一个假设工具的原型,并展示给业务部门进行进一步的讨论,我们通常会在完成一些UI工作后,以面向对象的方式思考整个过程。
在我看来,如果不用MVVM模式来使用WPF就没有太大的意义(除了作为对话框的超级简单的UI)。对于MVVM,应该从ViewModel开始。只有当一个有意义的视图模型可用时,视图才可以通过绑定视图模型数据来具体化。当然,您可以用假数据/测试数据硬编码视图模型的一些可绑定属性,以便视图实际上按预期显示,特别是如果视图必须显示一组对象,如ListBox、ListView、Grid,...
至于您展示的特定UI,因为它不显示对象集合,所以您仍然可以继续在XMAL上工作,使UI可运行/可显示。例如,对于combox,您可以在XMAL中硬编码combox项。但是您必须将该UI所需的所有数据放入ViewModel中,并将它们正确地公开为可绑定的属性。
对我来说,如果UI是无模式窗口/PaletteSet,我只使用WPF。如果是模态UI,我只在相当简单的情况下使用Win Form,UI显示时在AutoCAD中不需要任何动作。
有一点是肯定的,即使一个人非常熟悉/擅长WPF/MVVM,使用WPF肯定比使用Win形式花费更多的时间。当我们VBA的程序员第一次尝试的时候,我感到沮丧的感觉非常相似。15年前的NET API:突然,你觉得自己的工作效率不如以前了,需要学习做几乎同样的事情(好吧,我们只是意识到,通过不辞辛苦的学习,我们可以做得更多)。我很高兴这些天我能坚持使用WPF的大部分AutoCAD界面。
不是关于如何做的建议,只是分享一些想法/感受。
我同意诺曼的观点。我也开始使用WPF,因为它是WinForms。我还在学习,经常把头撞在桌子上,但现在我不想再回到WinForms了。 谢谢你们,知道你们在学习过程中也感到沮丧,我对此感觉好多了。我想我会开始戴头盔来保护额头免受办公桌的伤害。 我刚刚花了两天时间设计一个带有自定义物品的组合盒。我试图在组合框和下面的列表中显示两行文本和一张图像。打开的列表按设计显示项目,但组合框为空。代码变得越来越复杂,包括绑定,转换器,样式触发器,但没有任何帮助。最后,我在没有任何样式的情况下重新开始,现在它按设计工作。现在慢慢添加样式和绑定选项。
然后,我对项目上的工具提示设置了样式。它会在列表中的每个项目上弹出,但不在组合框中弹出。将工具提示移动到数据模板,以便可以在下面的组合框和列表中使用它,而无需对其进行两次设计。然后我发现当组合框未填充时,它也会弹出。我使用样式触发器解决了这个问题,该触发器在 SelectedItem 为 null 时设置 TooltipService.IsEnabled。
但现在它有效,看起来不错。但是我的额头上又有一个蓝色的污渍,因为砸在桌子上。长话短说:WPF实现起来很糟糕,但结果是值得的。它实际上是为非程序员设计的。程序员不需要深入研究设计,设计师也看不到代码。但是,由于我们既编程又设计,我们必须在两个世界中工作。
我同意学习MVVM。 阅读它,直到你的眼睛流血,从谷歌搜索“Josh Smith MVVM”开始。 他的ViewModelBase和RelayCommand构成了我的MVVM框架的全部,尽管完整的框架确实存在并且可能值得研究。 MVVM·莱特和劳伦特(创建了MVVM·莱特)的复视课程让我开始接触MVVM。Pluralsight上有一些关于WPF·MVVM的视频课程,我认为订阅几个月来开始学习是值得的。研究绑定和XAML语法。StackOverflow对于你会遇到的所有奇怪的问题来说都是很棒的。
https://www . plural sight . com/courses/mvvm-light-toolkit-fundamentals
最初的学习曲线非常陡峭,但你会成功的。不要对自己太苛刻,重构是一件事。我仍然将cruft从代码中移到它应该在的地方。把它做完,然后把它弄干净。
页:
[1]