zoukankan      html  css  js  c++  java
  • WPF 杂谈——开篇简言

    这俩年多来笔者一直在从事关于WPF的开发。虽然不能说是专家级别的。但是对于WPF的应用还是有一定的了解。论他的灵活性决对不在WinForm之下。WPF的出现更是引发一段热议。他的何去何从更是让很多人感到迷茫。因为那个时候可以说只有Winow 7才能跟WPF完美的接合。可惜他出不逢时,XP占了大部分的市场。所以WPF的出生动静很大,可惜后力不足,渐渐的淡淡化他的光芒。于至于网络上更是有对WPF的死亡产生了很大的争议。但是这并没有让他沉默下去,这几年来window 8和window 10的推广更是让他起来的迹象。对于未来WPF会发展到如何的程度。笔者也不敢猜测。更多的只是希望他能走的更远一点。

    如果WPF没有WinForm所具有的优点,那么他也不可能活到现在,更不用说还有可能崛起了。所以笔者想开一个系列来谈谈这俩年的WPF之旅。希望能给那些正在学习WPF或是将要学习的同学们带来一些帮助。出于笔者本身的学习方式有一点不正统的原因,所以这一系列的文章只能被定义为杂谈。

    曾经有一个刚刚从事WPF的同事问笔者静态资源和动态资源有什么不同。笔者傻了几秒反问到什么是静态资源,什么是动态资源。这次谈话的结果可想而知——很尴尬。为什么笔者会不知道静态资源和动态资源呢?事实上笔者没有看过相关的WPF书籍。那么笔者又是如何学习WPF呢?一句话——看开源项目的源码进行学习。本来笔者想把这一系列命名为“WPF 开源项目”。后来想想有一点自大了,同时笔者也不知道这一系列要以什么样子知识路线来讲解。所以命名"WPF 杂谈"显示平淡一点,又可以让笔者自由的吹牛。

    以前用于开发商业软件的技术有Winform(C#),MFC(C++), Swing(JAVA),Delphi。现在.NET又都出了一个WPF。即然有Winform了,为什么.NET又要在来一个WPF。笔者曾经有想过这样子的问题。可惜笔者就一个懒人,后面也没有细细的去查找原因。WPF的灵动是笔者深深喜欢的优点之一。和WinForm比起来笔者只知道他们的图形引擎不一样子。这还是从一些书籍里面看到的。WinForm是基于User32/GDI/GDI+,而WPF是基于DirectX引擎的。不用笔者多说就明白了——DirectX常常会在开发游戏的时候听到。所以WPF可以做到很多不错的动画效果。这也是Winform所不能做到。哦!不。应该说是很难做的。但是笔者到现在还是没有多大的应用动画效果。主要是笔者从事餐饮行业。餐厅里面的电脑配置不敢拘同。516内存的XP系统是一种常态。如果你用上动画的话,你注定要为动画的BUG和运行性能买单。这说明了一问题WPF需要有一定的配置环境。从.NET Framework来讲,还是.NET 4.0来的开好一点。因为这样子XP,Window 7,Window 8还是Window 10都可以做到共用。

    笔者之所以可以很快的上手WPF。这里要深深的感谢那些把自己的项目开源出来的人。这一点国外的开发人员还有做的很不错。WPF有很多知识点在国内是无法百度到的,所以想要学好WPF还是要去搞一个VPN或是自己想办法跳墙过去。

    SharpDevelop

    SharpDevelop是一款用C#开发的开发工具。这是笔者第一个接触的WPF项目。对于源码笔者也只是看过部分。当年笔者是从事JAVA开发的。对于JAVA的OSGI思想很感兴趣。也曾试着寻找有没有.NET大神写一些类似的框架。只是可惜太少了,有的也是半成品不是真正的OSGI。不过.NET有一个自己的想法——插件思想。这也是笔者查看他源码的原因。他虽然没有OSGI的思想,可是笔者对他的插件实现还是有一定的兴趣的。所以有兴趣的读者们可以试着去看一下。好吧。有一点远了。SharpDevelop他可以说是WPF和Winform的组合体。他有一部分是WPF实现。而有一些却是用Winform。当然读者们会想着这样子也行。不怕出问题吗?问题是不会太大。只是笔者还是建议不要这样子用。鬼知道他们俩个将来会什么样子。当然如果只是一次项目的话,为了方便到是可以这样子做。反正项目做完就是拜拜了。不用维护。SharpDevelop有一点大,想要吃通他的话,需要一定的时间和精力。不过他真的是一款学习PC端开发的最佳开源项目之一。

    SharpDevelop的下载地址:https://github.com/2594636985/SharpDevelop

    Xceed.Wpf.Toolkit

    Xceed.Wpf.Toolkit是一个框架。他自定义一些常用的组件。比如加载提示框。复杂的列表。 Xceed.Wpf.Toolkit只有表现层用到的知识,没有什么业务逻辑,所以学习起来还是比较易容的。不像上面SharpDevelop那样子。还要结合WinForm。他的源码笔者大部分都看过了。那么我们要学习他的什么呢?当然学习他如何实现用户自定义化组件的。现在他又更新了新的版本。不过很多源码没有什么变化。命名习惯还是那样子让笔者很不喜欢。但是不得不说他是进入WPF用户自定义组件最佳导师。初级的WPF学习者可以看这个开源项目。

    Xceed.Wpf.Toolkit下载地址:http://wpftoolkit.codeplex.com/

    Modern UI for WPF

    笔者由了上面俩个项目的经历之后,又遇到了WPF生命中的最佳战友——Modern UI for WPF开源项目(又称mui)。正如上面所讲的笔者一直在查看插件思想。而Modern UI for WPF不管是在对WPF的实现上,还是在编辑思想上绝对是良作。如何你学习了Modern UI for WPF又研究了他的源码。那么你可以很轻易的改动他的框架来实现你做需要的架构。可以这样子讲Xceed.Wpf.Toolkit是面向WPF的深度。而Modern UI for WPF可以说是广度。你学习组件知识可以选Xceed.Wpf.Toolkit。如果你想学习如何开发WPF的话Modern UI for WPF不二人选。你可以从源码中看到如何切换界面。如何实现界面之间的交互。并且你还可以看到如何排版资源。

    Modern UI for WPF下载地址:https://github.com/firstfloorsoftware/mui

    MaterialDesignInXamlToolkit

    当我遇到MaterialDesignInXamlToolkit开源项目的时候,我才知道原来WPF还可以做到这么好的效果。如果MaterialDesignInXamlToolkit是一个好动的年青人的话,那么Modern UI for WPF无疑就是一个经历过岁月的老人。MaterialDesignInXamlToolkit在动画和美工上做了很大的功夫。可惜笔者却无力消受。该死的餐饮行业。每一个按扭的动画效果足以让你美美的睡上一觉。美中不足的是作者用的是4.5.2以上的.NET Framework语法进行编写。所以你可能要手动的修改回来。变成4.5或是4.0。至少笔者是这样子做的。同后面的代码习惯让笔者叹了一口气。这也没有规则了吧。

    MaterialDesignInXamlToolkit下载地址:https://github.com/ButchersBoy/MaterialDesignInXamlToolkit

    MahApps.Metro

    和MaterialDesignInXamlToolkit一样子,可惜在笔者看来他没有MaterialDesignInXamlToolkit来的效果,又没有Modern UI for WPF在大体上表现出众。可以说MahApps.Metro对学习WPF来讲比较平稳。没有过多的亮点。可能笔者有了上面三个开源项目的经历之后。在去看MahApps.Metro显示有一点知识疲劳。所以笔者一般只是把他当作小情人来看待。如果上面三个开源项目都没有找到笔者需要的时候,才会去找MahApps.Metro。

    MahApps.Metro下载地址:https://github.com/MahApps/MahApps.Metro

    笔者看了很WPF的开源应用项目。最后留下来也就是这几个。在后面的开发过程中,笔者也是靠这里个开源项目决解了很多开发上的问题。在开发过程很明显的感受与Winform有着根本上的不同。最大的体现是WPF的引入了MVVM模式开发。为此还出现了很多开源的MVVM框架。其中最出名有Prism、MvvmLight等。很不幸的是笔者都没有用过。不是笔者不想去用。而是觉得用了,在一定程序上会减少了WPF的灵活性。如果要推存的话,笔者会选择Caliburn.Micro开源项目。对于Caliburn.Micro的应用到是有一个开源的小项目。读者们可以去了解一下——gemini

    笔者的学习方式也很简单就是看源码。可以说笔者的WPF之旅就是吃源码之旅。不知道大家跟笔者是不是一样子的。后面的文章没有出现专业的术语也请大家不要过份的在意。笔者真的没有看过多少书。几乎全实战。

  • 相关阅读:
    【JAVA笔记——道】JAVA对象销毁
    【JAVA笔记——道】并发编程CAS算法
    httpClientUtil的get请求
    python基础 day11 下 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业
    python基础 day11 上 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 事务 索引 python 操作mysql ORM sqlachemy学习
    Python基础 Day10 Gevent协程 SelectPollEpoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 RedisMemcached缓存 Paramiko SSH Twsited网络框架
    python基础 day9 进程、与线程区别 python GIL全局解释器锁 线程 进程
    python基础 day8 Socket语法及相关 SocketServer实现多并发
    python基础 day7 面向对象高级语法部分 异常处理 异常处理 Socket开发基础
    python基础 day6 面向对象的特性:封装、继承、多态 类、方法、
  • 原文地址:https://www.cnblogs.com/hayasi/p/6680075.html
Copyright © 2011-2022 走看看