WPF的学习笔记(1) -- (积累自2016年5月1日 至 2016年6月1日)
敬告读者:因为是事件驱动模式的高速学习,高速学习意味着,不系统,不科学,不合逻辑,不一定正确。所以要是有不对的地方,页面下面留言给我,跪谢!
背景介绍:
最近在公司的开发工作中,接手了从别的公司交代过来的代码巨怪,其中主要的技术有 WPF,控制反转框架Spring.net,SqlMap(有点像是ibatis.net),Remoting,作业调度框架Quarz,我们的工作,是把这只怪兽,敲碎,重组并且优化,目标暂时是重构成WebAPI底层和WPF界面两个部分,下面是我学习WPF的过程中,留下的一些很(luan)有(qi)见(ba)地(zao)的笔记。
笔记:
学习开始的时候,我通常要求自己不要分太多精力去关注一个技术的历史,英文全称是什么(Windows Presentation Foundation)这些问题,这个对实际生产,并没有实际作用,我强烈要求自己只关注怎么开始,并且要开始习惯地用 “问题回答框架”(是什么? 为什么? 怎么样? )来执行学习作业。
WPF的“是什么”和“为什么”,我认为需要搞清楚几个事情:
- 明明已经有Winfrom,为什么还要有WPF呢?有什么改进?
- 最直面地,将会用到什么方面的知识呢?
- 同期的技术有什么呢?
1、答:
我是搞Web(asp.net)起家的,Winfrom都不太熟,突如其来的PC界面开发,着实有点措手不及,但是WPF的Xaml界面语言着实让人眼前一亮,既然是ML类语言,那么Xml,Html的语法和Xaml应该如出一辙的,于是剩下的,马上就只剩下标签的熟悉程度问题了,这对Web开发者而言,是个极大的利好消息。
WPF从某个意义上说是很像 Winfrom的,你可以很Winfrom地开发WPF,新建一个WPF解决方案之后,直接拖一个控件(button)到界面上,然后双击增加事件。
但是它也可以很网页地开发某些From,比如想做一个登录窗口,你必然会想到这样子的Html代码:
姓名:<input type="text" id="txtUserName">
密码:<input type="password" id="txPassword">
<input type="submit" id="btnSubmit" value="提交">
于是这么看来WPF也提供了这样一种类似的结构:
<Button x:Name="btnPageEvent" Content="点我!" Margin="441,0,0,0" Click="btnPageEvent_Click"/>
在这一点上Winfrom给我的感觉是特别麻烦,你通常只能通过拖拽的方式添加控件,如果要写代码添加,disigner.cs的代码可读性真是可以看得人作呕的,这意味着什么,这意味着,界面的开发和代码的开发分离了,而且界面代码的复用能力增强了许多许多。
2、答:
最直面的,当然就是上面提到的Xaml,然后有MVVM框架,然后要像Html+CSS那样谈表现和内容分离,然后要谈SilverLight(虽然当前还没学习到,但是我感觉WPF的动画是让人兴奋的)
3、答:
WPF有几个同窗,WCF,WF,新一期的MVC框架等等,都是非常有竞争力,有吸引力的知识和工具。为什么要知道这个呢?因为我一定会把WPF和WCF
接下来怎么样开始好呢?
首先这不是从头开始自己开坑,这是别人家公司搞了好几年的代码,别人家公司的知(yuan)识(shi)产(ju)权(keng),给你代码已经很对得起你了,怎么可能有文档呢?
实践出真知,当然是要开始写了,才会懂的,我简单地整理了下代码怪兽里面的一些经常出现的控件和单词,通过书籍《WPF编程宝典:使用C# 2012和.NET 4.5(第4版)》,我简单地将他们分到了以下几个类别里面:
- WPF的基本控件(Button,Radio,CheckBox,DataGrid,等等) //(大家都要有的啦!)
- WPF的布局控件(Grid,StackPanel,Border等等) //(布局这个单词在PC的软件上看见是件值得让人感动的事情)
- 元素的绑定(Binding,ObservableCollection) //(MVVM的ViewModel绑定操作)
- 元素的外部资源,样式或者转换器(StaticResource) //(表现和内容分离)
- 事件的触发器(Triggers,EventTrigger,ICommand)
嗯,于是问题来了,我发现经常会有这样的写法:
Style="{StaticResource SimpleButton}"
CommandParameter="{Binding ElementName=gdTaskList, Path=SelectedItem}"
Binding="{Binding CreateTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource dateTimeConverter}}"
这时候我不禁不断得吐槽,这都什么鬼啊……
- => Binding里面还套着一个Json格式的对象,对象里面还有一个Binding?
- => StaticResource,这是哪里的Resource?哪里引入进来的呢?
- => Mode, UpdateSourceTrigger, Converter都哪里来的属性,自己带的么?
- => Converter 你又调皮了,怎么又带上一个StaticResource了,这不元素样式的资源么?怎么跑来转换器这了?
不,不能再继续下去了,这样是很凌乱的。人家是大团队,人家绝对不是傻瓜,毕竟是几年的代码,再乱,都有它的章法。我们要暂时放下工作上的这一切,学习一点基础知识才对:
MVVM:
这个东西可能对于传统的程序员们而言会有点难理解,大家都非常习惯MVC的一套,用户向Controler提出请求,然后Controller把View和Model结合在一起带到用户面前;也非常喜闻乐见地用三层开发。
(我的学习顺序或许有点非主流,我是先学习了Web上面的Knockout.js,对MVVM有一个初步的了解,再学习的WPF。)
我是这么理解MVC和MVVM的:
我们做的页面,我们取出来的数据,分别是两个对象,对于MVC来说,我们看到的页面和数据,是Controller从数据中一个一个地找到对应的属性,并且贴到View对应的地方去的,注意是一个一个地找到;而对于MVVM而言,我们看到的页面和数据,就是预先标记好这里要填写什么的页面,然后把数据啪的一下,叠在页面上面。
可能说的不清晰,我举个例子吧,不知道读者小时候有没有见过很老式的投影仪(胶片投影机,见上图),不过现在基本都配备了高级的投影仪和实物投影,我小时候上课的时候,老师会把习题先写在一张透明的胶纸上,然后拿另一张胶纸叠在习题的上面,写上答案。上课的时候老师先把写着习题的一张投影出来,大家做练习,然后,再把写着答案的一张叠在习题的上面,这样就可以对答案了。嗯,我这里讲的就是“叠”的这个操作,这个操作给我的感觉其实很像MVVM的绑定操作。
建立项目:
只有3.5的.net FrameWork才有WPF的,所以代码开发工具最好是2010以上(大家快去下载2015的community版本吧,免费的咯)。
新建项目,就是 文件->新建->项目...
嗯,这个倒是难不倒我……
结束:
嗯,我们还没有写一句代码,就结束了,
确实几个月的收获也不止这么一点,
是的,饭要一口口吃的,笔记也要一点点整理的,
但是我觉得还是开了个好头的,
起码对我来说是的……
WPF的学习笔记(1) -- (积累自2016年5月1日 至 2016年6月1日)的更多相关文章
- 【WPF】学习笔记(三)——这个家伙跟电子签名板有个约定
这篇博客依旧是以电子签名板为基础而展开的,主要是对前文([WPF]学习笔记(一)--做一个简单的电子签名板)存在的部分问题进行解释,以及部分小功能的添加.由于这篇博客是建立在学习笔记一的基础上的,所以 ...
- WPF-学习笔记 动态修改控件Margin的值
原文:WPF-学习笔记 动态修改控件Margin的值 举例说明:动态添加一个TextBox到Grid中,并设置它的Margin: TextBox text = new TextBox(); t_gri ...
- WPF开发学习笔记(转)
总结下学习WPF的笔记,方便查阅 1 编译 添加程序集引用:WindowsBase.dll,PresentationCore.dll,PresentationFramework.dll 2 布局 ...
- 《深入浅出WPF》 学习笔记
<深入浅出WPF> 序言 1. 什么是WPF 2. 为什么要学习WPF 第一章 XAML概览 1. XAML是什么? 2. XAML有哪些优点 第二章 从零起步认识XAML 1. 新 ...
- 【WPF】学习笔记(一)——做一个简单的电子签名板
参加实习(WPF)已经有两个多周的时间了,踩了一些坑,也算积累了一些小东西,准备慢慢拿出来分享一下.(●'◡'●) 这次呢就讲讲一个简单的电子签名板的实现. 先上张图(PS:字写得比较丑,不要太在意哈 ...
- 【WPF】学习笔记(二)——依旧是一个电子签名板
这篇博客呢,主要谈谈在实现电子签名功能中踩过的几个坑:1.System.BadImageFormatException异常:2.无法加载DLL“###.dll”,: 找不到指定的模块. (异常来自 H ...
- WPF基础学习笔记整理 (九) 资源
基础知识: WPF的资源是一种保管一系列有用对象的简单方法,方便于重用. WPF UI元素的Resources属性,都是继承自FrameworkElement列,且其类型为ResourceDictio ...
- WPF基础学习笔记整理 (八) 命令
基础知识: 命令是应用程序的任务,并跟踪任务是否能够被执行. 命令不包含执行应用程序任务的代码. 命令是比事件更高级的元素.默认的命令目标是当前获得焦点的元素. 良好的Win应用程序,应用程序逻辑不应 ...
- WPF基础学习笔记整理 (七) Binding绑定
基础知识: 数据绑定是一种关系,该关系告诉WPF从源对象提取一些信息,并用这些信息设置目标对象的属性:目标对象始终是依赖属性,而源对象则可以是任何内容. BindingOperations类,提供静态 ...
随机推荐
- Node.js Express 框架学习
转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...
- linux---------------centos6.4安装完了以后敲ifconfig,没有局域网ip。解决如下
1.vim /etc/sysconfig/network-scripts/ifcfg-eth0 进入linux然后进入这个文件里面如下: DEVICE=eth0HWADDR=00:0C:29:92:F ...
- JS获取当前浏览器的类型
<script type=“text/javascript”> function isIE(){return navigator.appName.indexOf(“Microsoft In ...
- Android 自定义ListView
本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 数据,通过contextView.setTag绑定数据有按钮的ListView. 系统显示列表(L ...
- 自定义 JSON 对象
针对 IE9 以下不支持 JSON 对象的处理方式,网上大部分自定义的方式无形之中都会将中文转码为 Unicode 编码格式的字符换,但是在浏览器中我们有无法察觉到(浏览器自己解析成 UTF8 了), ...
- DataList删除操作
<asp:DataList ID="fileList" runat="server" RepeatColumns="1" Repeat ...
- Subversion Edge
http://www.collab.net/downloads/subversion#tab-1
- DataTable转化为Model
/// <summary> /// 将DataTable转成Model /// </summary> /// <param name="dt"> ...
- 【转】Eclipse快捷键 10个最有用的快捷键
转载地址:http://www.open-open.com/bbs/view/1320934157953 Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但 ...
- webpack react基础配置二 热加载
用到 webpack-dev-server 先安装,注意 装到全局 还是本项目我也没注意 因为之前一直报错,有很小可能是安装到本地解决了,或者是我网络问题: 装到全局:$ npm install ...