WPF四年,尤不足以替代WinForm

为什么工业物联网上位机项目大多选择 C# WinForm,而不是 WPF 或 Python? 本文解析工业物联网上位机选型,指出 C# WinForm 因契合工业核心诉求(稳定、硬件交互顺畅、部署简单、易上手)成主流。对比其他技术短板:WPF 学习成本高、实时性不足;Python 受 GIL 锁影响实时性与稳定性,部署麻烦;LabVIEW 成本高、定制化弱。同时提及 WinForm 兼容历史系统、工程师易上手、有商业级支持等隐性优势,及.NET 跨平台等未来趋势。核心是工业选型重 “适合”,WinForm 精准匹配场景需求。 阅读详情

WPF四年,尤不足以替代WinForm

WPF出山已四年,作为官方内定的下一代UI系统掌门,没少露脸。但这个新掌门能否胜任,仍是众多开发者的心头之虑。通过对VisualStudio 2010的编辑器部分用WPF重写,微软终于对这个胜任与否的问题给出了个证实,当然,也给WPF做了不少重要的改进,尤其是终于解决了文本看不清的问题。所以,至少从.NET 4开始,WPF应该可以比较安全的用于重要的开发项目了。

但是,使用WPF并不会象用WinForm那样顺利。

首先,它太复杂了,入门门槛很高。这种复杂性一定程度上源于它统一桌面和Web开发的野心。用一套Framework来同时支持桌面和Web,固然很好,但也同时继承了两者的复杂性。如果既有WinForm又有ASP.NET开发经验的话,就会觉得这种合并很自然,有前途。当然,WPF还有更高的目标,就是挑战Flash。这种以一当三的精神固然可嘉,可以想象同时击败三派风格迥异的武林掌门的话会有多强大。但对我们学、用WPF的开发者而言,有多少人是要同时针对两个甚至三个领域的?即使只需面对其中一个领域,我们也得面对WPF的全部复杂度。当然,也有潜在的好处,可以轻松的引入另外两个领域的技术。

其次,对WinForm开发者而言,入门WPF可能还要更困难,因为最基本的东西——制作界面的XAML,完全是Web式的风格和思路。原来WinForm的知识和技能,大部分都不再适用。一开始就要面对的选择是Document、Window、Page、NavigationWindow等,而不是一个简单的Form。创建Window后,如果指望象WinForm那样设计窗体,就会发现它的窗口设计器基本是个笑话,还是老老实实地手写XAML吧,这时会庆幸自己还曾学过点HTML。如果无法忍受手写XAML,那么可以下载Expression Blend,类似于Flash编辑器,这时会庆幸自己还曾搞过那么点美工,会用Flash。

之后,会发现加个Tool Button竟然不能直接同时指定图标和文本,还必须嵌套一层StackPanel;Disable时图标不会变灰,需要自己写Style来实现;ToolBar末尾的Overflow popup按钮总是显示很讨厌,要隐藏就得在ControlTemplate上最手脚;DropDownButton也没有,要自己实现……不少WinForm里习以为常的东西,突然都没有了。虽然通过强大的Style系统和Composition都能实现,但毕竟是要费额外的功夫。

Resource的添加和管理比以前倒是简单了,只要把文件加入project里,自由组织目录结构,把文件的Build Action设置成Resource就行了。但是引用资源文件的路径就搞恶了,不知道是哪个精神异于常人的家伙发明了这个Pack URI的规则(形如pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/MyResourcePath/ResourceFile.xaml),一看见我就想打沙包。所幸多数情况下只需要相对路径,可以省略前面那串欠扁的东西。

数据绑定算是编程模式上最大的改变之一了,与UI的数据交互几乎全部通过绑定来实现,简单的情况会很简单,很强大,比WinForm里的数据绑定强多了。但复杂的情况就让人挠头了。稍微复杂一点就必须写个ViewModel层,也就是要写个介于UI和业务逻辑之间的交互类,UI都绑定到这个类的属性上。之后要考虑的是数据显示的格式化问题,比如如何把一个浮点数显示成百分数输出;组合多个属性合并成一个输出的问题;还有用户输入的合法性校验问题;限制可输入字符的问题;想要在按回车键时接受处理输入的问题……这些都不是直接了当有现成支持的问题,需要自己写些代码来解决。

除此之外,WPF的语言本地化工具支持基本等价于零,只有复杂难用的命令行工具,还是SDK的sample编译的。要做本地化翻译基本只能靠第三方工具。

更有趣的是,WPF程序缺省使用en-US的Culture,而不管当前系统的Culture是什么,需要自己写代码在程序启动时设置Window或控件的Language属性,或者Override它的FrameElement.LanguageProperty的MetaData里的缺省值。当然,这个不是bug,而是by design。其原因来自最早.NET的一个设计错误。

 

当年最初设计.NET时,他们计划将全球化和本地化支持从基础库部分开始支持,以便使之适应未来越来越全球化的市场,于是所有的字符串格式化函数都是缺省使用当前系统culture的。但此时所有其他开发语言里,缺省都是en-US标准。结果,大量的程序并未考虑这种差异,其结果一是性能损失,考虑本地化的字符串处理的开销要比简单的二进制字符串处理慢很多,二是导致了大量在不同语言系统上会出现的bug。比如,在德文系统上生成个浮点数“1.23”文本,出来是“1,23”,发送到英文系统上读取,就解析出错了。再比如,不同语言的大小写对应是不同的,转换大小写在不同语言的系统上可能得到不同的结果,在文件名、路径处理上会导致意想不到的bug。开发.NET 2.0时,.NET的开发者们已经意识到了这个错误,但已经不能更改已有的API了,于是只能为这些函数增加了带新参数的重载,并推荐大家不要再用旧的API,而要用这些写起来非常长的函数,如string.Equals(string another, StringComparison comparisonType),用string.Format()时也最好用指定Culture的那个重载,充分利用CultureInfo.InvariantCulture。WPF的设计者们充分吸取了这个教训,所以缺省总是en-US,需要本地化的地方要显示指定。

再之外,ILMerge是不能正确合并WPF的assembly的,因为它不能修正baml里对资源的引用字符串。也就意味着,基于ILMerge的obfuscator也有这个问题。不过对Obfuscator而言,要支持WPF本身就不是件容易的事。因为WPF依赖与数据绑定,数据绑定里大量用对象属性的名字字符串,而编译之后XAML会被编译成二进制的BAML,而BAML的格式是非公开的。这样就不能去改被引用的对象属性名。

总而言之,WPF还有很多路要走,前途是光明的,道路是曲折的。未来是WPF的,也是WinForm的,但归根结底都是韩国人的?

Winform工控行业对比Wpf的优势? WinForms:由于其广泛的使用和较少的依赖性,维护和更新WinForms应用程序通常较为简单。WPFWPF使用DirectX进行渲染,这通常意味着在某些复杂的图形和动画场景下,WPF可以提供更流畅的体验。然而,在工控环境中,如果界面设计不复杂且主要关注数据展示而非复杂的动画和效果,WinForms的性能优势可能更为明显。它的控件是基于GDI+绘制的,这在某些情况下可以提供更好的性能,其是在处理大量图形或控件重绘时。WPF:虽然WPF提供了更现代的开发体验和更好的图形处理能力,但它不是向后兼容的。 阅读详情

相关推荐

DCM4CHEE Archive Light 应用配置-存储配置

本文介绍了在DICOM归档系统中配置和管理存储的方法,包括通过用户界面和LDAP导入两种方式。主要内容包括: 存储配置概述:用户可根据需求配置单个或多个存储设备,支持在磁盘空间不足或多任务并行时使用。存储分为Archive设备级(序列元数据存储)和Application Entity级(对象存储/元数据存储)。 用户界面操作: 设备级存储配置:通过菜单导航添加/编辑存储描述符,设置Storage ID、URI等关键参数 应用级存储引用:在设备扩展和网络AE中分别配置元数据和对象存储引用 LDAP配置方法:

洪城叮当的博客 1389

[译].NET Framework 4.8发布

原文地址:https://devblogs.microsoft.com/dotnet/announcing-the-net-framework-4-8/ 我们很高兴地宣布今天发布.NET Framework 4.8。它包含在Windows 10 2019 May更新中。.NET Framework 4.8也可以在Windows 7+和Windows Server 2008 R2 +上使用。 您...

weixin_30662011的博客 2225

WPF vs WinForm:2026年C#上位机UI框架选型,看这篇就够了

Windows工控机:简单采集/低配置选WinForm,现代化可视化/4K大屏选WPF;国产化ARM64:WinForm/WPF均不适用,优先选Avalonia UI;老项目维护:WinForm直接升级.NET 8,WPF优化MVVM后升级,不盲目重构;开发效率与稳定性:WinForm胜在“简单、稳定、易调试”,WPF胜在“现代化、可视化、易扩展”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1384

wpf替代winform 解决PLC数据量过大页面卡顿的问题

winform 由于不是数据驱动, 页面想刷新数据必须刷新控件, wpf则不用. 可以利用wpf 的数据绑定和IOC, 页面中的消息传递, itemscontrol 实现大量数据刷新, 上位机页面不卡顿 代码如下: <Window x:Class="NavTest.Views.NewMainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas

helldoger的博客 1973

都是基于.NET平台,WPF能取代Winform吗?

Winform还是WPF? 很多winform的学者时常在我的技术群咨询要不要学习WPF?我一贯的观点是必须学啊!如果是搞工控做cs软件开发,WPF自然是首选。WPF优势在哪里?①前后端分离:WPF是数据驱动的而非Winform的事件驱动,可以通过属性bing的方式实现界面的数据更新,这样就可以很好地实现前后台的分离,在大型的开发项目中,后端开发人员只用编...

zls365365的博客 1399

都是微软亲儿子,WPF凭啥干不掉WinForm?这3个场景说明白了

摘要: WinFormWPF作为.NET平台的桌面开发框架各有优劣,无法互相取代。WinForm适合快速开发、稳定性要求高的场景(如企业工具、工业软件),学习成本低且维护简单;WPF则以美观界面、数据绑定和复杂交互见长,适合客户端软件和高DPI需求。微软虽推出WinUI 3和MAUI等新选项,但WinFormWPF仍广泛使用。开发者应根据项目需求选择工具:初学者建议从WinForm入门,再进阶WPF;老项目无需盲目重构。技术选型应注重实用性与场景匹配,而非追求替代

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 595

WPF的本地化思路提示:直接汉化BAML

首先是看到这篇博文:《WPF四年不足以替代WinForm》其中就提到了WPF本地化的问题。其中是这么说的: 编译之后XAML会被编译成二进制的BAML,而BAML的格式是非公开的。这样就不能去改被引用的对象属性名。 然而,非公开的就一定无从知晓了吗?也许是时代进步了,那篇博文...

chengsha819426的博客 1430

入职两个月,WPF开发感想

1 、新工作,新开始 2、WPF初次接触以及学习MVVM开发模式 3、后台数据操作,ORACLE 存储过程(边做边学) 4、总结   4.1工作开发中的小问题 ,遇到的坑;   4.2 解决的问题,学校到的知识点 一、新工作,新开始 今年是来深圳的第二年(16.01到现在),出来工作的第四年了(第一年在广州14.03-15.12),时间过的快。刚开始工作做winfrom开发,...

weixin_30888707的博客 302

絮语----工作四年的碎碎念

  掐指一算,工作的第四个年头了,也已经是第三份工作了。   从第一份工作开始,就在使用C#语言,从事石油行业绘图以及数据共享、管理软件的开发,Winform + WebService 的模式。期间折腾过Windows Server 2008、Windows Server 2012、Windows SqlServer 2005、Windows Sqlserver 2008、Oracle...

dianheng5503的博客 174

C# net winform wpf 发送post数据和xml到网页

由于项目需要发送数据到网页 这里用aspx做测试 采用post以及get发送数据,页面进行数据 首先这个东西很简单很简单,基本上学过的都会,但是原谅一直搞cs几乎不搞bs的猿类吧。三四年没接触bs。 除了记录自己用意外。也希望能帮助别人 写程序与bs交互的处理webservice也没别的了。冷不丁的遇到了还抓瞎,只能网上搜罗然后测试在整理,在学习。。。。。。。 希望帮助没接触过的,以及...

weixin_33817333的博客 270

ComponentOne 2019V1:全面支持 Visual Studio 2019

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> ComponentOne Enter...

cpongo5 248

单建的实例哪里去了?【Asp.Net MVC4】

今天在做架构的过程中,遇到这样的一个问题:单建的实例不见了! 真的很奇怪,整整一个下午,想了无数的方法,做了N多的测试,可就是找不见。 大致是这样的情况: 在项目启动的初期,将一些选项值初始在一个单建的实例中,事情很简单吧?好了,开始实现,一会儿就完成了,建一个控制台程序测试,一切正常。 好了,刚才做的这些事情是一个网站的服务部份。现在开始搭建网站。Asp.Net MVC4,一会儿也好了,

大侃而谈 2048

关于PC客户端软件开发的一些思考

关于PC客户端开发的思考

MusicMan 3353

.NET Framework 4.8 发布,JIT 和 NGEN 改进

开发四年只会写业务代码,分布式高并发都不会还做程序员? .NET Framework 4.8 发布了。新版包含在Win...

weixin_34258782的博客 289

有了WPFWinform还有活路吗?

近年来,随着技术的不断发展,Windows Presentation Foundation(WPF)和Windows Forms(WinForms)这两种技术在开发桌面应用程序方面一直备受关注。虽然WPF以其强大的功能和灵活性吸引了众多开发者,但WinForms在某些领域依然有着不可替代的地位。本文将从多个角度分析WPFWinForms的优缺点,并结合实际案例探讨WinForms在现代开发中的生存空间。

百锦再的博客 2万+

该选择WPF 还是 Winform

如果你需要构建精美、交互丰富的界面,并且对于数据绑定和MVVM模式有需求,那么WPF是一个更好的选择。WPFWinForms都是.NET平台下的桌面应用程序开发框架,它们各有特点,适用于不同的场景和需求。WPF具有强大的图形渲染能力,支持高级UI设计、动画效果和丰富的视觉样式,适用于需要精美和交互丰富的用户界面。WinForms在性能方面表现更优,对于简单的界面和较低的硬件配置能够提供更好的性能和响应速度。WPF在性能方面相对较重,对于简单的界面和较低的硬件配置可能会显得过于复杂和庞大。

单片机一哥的博客 3342

WPFWinForm技术有什么区别?哪个更加有前景?

1、 结果来说,属于两套界面渲染方式。一个是对传统windows界面元素的封装,通过gdi绘制。另一个是全新的dx渲染绘制的界面,也脱离了对传统windows控件的依赖,没有历史包袱,理论上可以展现更炫酷的界面。对初级开发人员来说,没太大区别,类似的基本设计器是他们设计界面的主要手段,一样给事件编写代码。对初级以上开发人员来说,wpf需要学习xaml,有全新的ui描述语言,特别是可以通过模板的嵌套...

谁为拨动染血的时空苍穹 7万+

工业上位机UI选型终极指南:WinForm vs WPF,谁才是产线真王者?

(您的原文已完整保留,略)WinForms高分屏错位→ 强制DPI感知(app.manifest + app.config)WPF首次加载慢→ 提前预热(SplashScreen + 后台加载资源)WinForms控件闪烁→ 开启双缓冲 + 重写OnPaintWPF内存泄漏→ 事件要 -= 注销,BitmapSource用Freeze()混合开发黑屏→ ElementHost/WinFormsHost用硬件加速兼容模式低配机卡顿。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 1744

Android框架WiFi架构

动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_spplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调试来对wifi芯片操作,简单的说,二、android wifi 系统架构:andtoid wifi 系统引入了wpa_supplicant,它的整个wifi系统。

手机-手表蓝牙开发工程师的博客 3428

res10_300x300_ssd_iter_140000.caffemodel与deploy.prototxt

res10_300x300_ssd_iter_140000.caffemodel与deploy.prototxt

上一篇: LingEngine图形部分架构图
下一篇: 换掉Lua是个错误
Nightmare
博客等级 码龄26年 70粉丝 118原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值