我对WPF知识点的理解和梳理笔记
本文的主要内容是自己使用WPF开发以来,本人对相关知识的梳理,仅为个人的总结,对很多事物的理解依然在探索阶段,总会有谬误和更佳的开发方式,如能提出宝贵建议,感激不尽。
虽然本人并不只专注于WPF,还喜欢各类编程语言,但估计在今后1,2年内依然会继续经常使用WPF开发。
想来想去,时间一长,很多东西还是整理并记录下来为好,遂决定从发布此文以后,开始慢慢积累,随着个人知识的扩展和理解,本文可能会不断添加或者更新内容,然而也会尽可能保留对同一概念前后不同的理解。
WPF搞了快一年,除了去年在上家公司主导开发过一个比较大的WPF项目(已经商业化),其他都是小打小闹的软件。在我看来
WPF的优点是:
1. 可以相对比较容易的写出完全定制化的界面。
2.特有的MVVM设计模式可以完美的分离 UI设计(View层) 和 业务逻辑(Model层)。
WPF的缺点是:
1. 学习成本比较高(我指的是真正精通,你和我说就拖拖控件生成个事件写个方法,当个处理工具,那都不用学了)
新的概念非常多,容易混淆,本人耐性还是很好的,但依然常常连续好多天不停的折腾,折腾到开始喷MS为何这样设计。
2. 不能跨平台。过一阵子去研究下Mono。
3. 由于本身的复杂性,BUG有时隐藏的比较深。
4. 坑很多,复杂的项目下很多坑必须得自己跳,官方文档大多数时候并不能解决实际问题,网上搜索的资料参差不齐,很难查到自己想要的,为了解决大坑最开始常常需要去理解一大堆从天而降的概念。国外下载的demo有时会复杂的过分,csdn上的很多源代码又太不专业···我就吐槽下。
目前为止,我依然没有解决的问题:
a. 图片占用内存太大,在图片很多并且实时刷新速度很快的时候,如果不写代码手动释放资源,内存就会暴涨至崩溃。而同样的功能改用Winform实现就只占用很小的内存。
b. 数据虚拟化面板在XP或部分Win7电脑上显示为空白。只能替换为普通面板。
c. 窗体设置为允许透明时,WebBrowser显示为空白。(目前查到和尝试的方案没有完美解决的)我的办法是换成第三方浏览器内核,比如CEF,但是使用 javascript 内外通信又是很麻烦的事情。不然就是放弃窗体透明···
近期又开始使用WPF写一个程序,同时希望能利用这次开发,将之前WPF相关的知识做一个整合,重新理解概念,丢弃不好的,探索更加舒服好用的,并将已知的融会贯通,尽可能用最“优雅”的方式去实现功能。
那么我们开始吧。
WPF相关技术一定要弄清楚的知识点,先列个大纲,按照我个人建议的学习顺序排序。
1. 理解XAML相关窗体设计的原理。
a. 逻辑树结构非常类似HTML,但更加麻烦。
b. 可以使用XamlPad查看可视树结构。
c. 理解Style类似于CSS,并可以通过随时更换资源字典以达到更换主题或者换肤的目的。
2. 触发器(Trigger),最常用的是属性触发器和数据触发器。
a. 需要知道触发器主要是用于视觉交互的。
b. 属性触发器是控件本身的某个属性值发生改变,比如IsMouseOver=True的时候,会触发可视内容 比如背景色 发生变化。
c. 数据触发器是在数据模板(DataTemplete)中,当某个业务数据发生变化改变时,会触发可视内容发生变化。
3. 为了创建形态各异的界面,实现各种神奇的效果,需要学习WPF绘图。
a. 使用图形,包括:直线,矩形,椭圆,贝塞尔曲线,Path(最强大的路径)
b. 应用滤镜效果,Effect比较简单,但是导入和开发外部滤镜,一直没有研究。
c. 使用变形。有平移,旋转,缩放,扭曲等基本变形,以及矩阵变形。(要注意的是:每种变形既可以放在呈现变形中,也可以放在布局变形中,需要区分二者的区别。呈现变形只是看到的样子变化了,实际位置和形状都没变。布局变形是真的变化,会在变形的同时不断对其他控件重新进行布局计算。)
4. 学习使用XAML创建简单的动画
a. 尝试使用3类触发器触发动画的发生
b. 使用VisualStatusManager来应用动画
c. 如无必要,尽量避免通过写代码的方式创建动画
d.(扩展:使用Blend创建并组合出复杂的动画。)
5. 依赖属性和附加属性。
a. 要学会如何自定义我们自己扩展的依赖属性和附加属性。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70996.html