WPF入门一:WPF和XAML简介

  1. 什么是WPF

    Windows Presentation Foundation的简称。专门用来编写程序表示层的技术和工具。

  2. 学习WPF的好处:

    学习WPF技术可以为WCF的学习锦上添花。WF设计工作流,而设计WF的语言就是Xaml。学习WPF后,Silverlight可以算是会了80%,因为Silverlight可谓WPF的一个子集,是WPF的网络版。它在WPF的基础上,去掉一些不常用的功能,简化了一些功能的实现,添加网络通信功能,最终让WPF实现在浏览器中。另外Silverlinght是WP7手机平台。所以学习WPF后,连手机平台上的程序也会写了。

            为了使代码解耦,人们研究出各种各样的设计模式,如MVC,MVP。在WPF出现之前,winform和webForm等技术均使用"事件驱动":由事件→订阅→事件处理器 关系交织在一起,尽管可以使用MVC,MVP,但是一不小心就会使睫毛逻辑和业务逻辑纠缠在一起,造成代码难懂,bug难排。WPF技术则是在开发理念的基础上一次升级,由"事件驱动"变为"数据驱动"。

            事件驱动:用户每一次操作都会触发程序发生一个事件,事件发生后,用于响应事件的处理器就会执行,时间处理器就是一个方法(函数),在这个方法中,程序可以处理数据或者调用别的方法。依次完成了对业务需求的满足。可见事件驱动时代的数据是静态的被动的。界面控件是主动的,界面逻辑与业务逻辑之间的桥梁是事件。

            数据驱动,整好相反,当数据发生变化事,会主动通知界面控件,推动控件展示最新的数据。同时用户对控件的操作会直接送达数据,就好像控件是"透明"的,可见,在数据驱动理念中,数据占主动地位,控件和控件事件被弱化,(控件事件一般只参与界面逻辑,不再染指业务逻辑,使程序复杂度得到有效控制)WPF中,数据与控件关系就是哲学中内容与形式的关系,内容决定形式,所以数据驱动界面,这符合哲学原理。

  3. Xaml:(Extensible Application Markup Language可扩展应用程序标记语言,读作zaml)微软新的开发语言,在桌面开发中类似网络开发中的Html+css+js的角色。他是WPF技术中专门用于设计UI的语言。

    优点:1.可以设计出专业的UI和动画(好用)

        2.不需要专业的编程知识,简单易懂,结构清晰。(易学)

        3.使设计师能直接参与软件开发,随时沟通,无需二次转化(高效)

                4.实现了UI和逻辑的分离。(解耦)

        关于解耦:自从应用程序从控制台(Console User Interface,CUI)升级到图形用户界面(Graphic User Interface,GUI)后,程序员们就一直追求将视图view代码和逻辑代码分离。因为如果视图逻辑和业务逻辑纠缠在一块构成高耦合度,就会造成1.了解代码困难,2.维护困难,(对于一个应用程序来说,后期维护的成本 )会大大超过开发成本,这是因为无论是UI的改变或者出现了bug,都会导致大量代码的修改。)3.重用性低。(高耦合度的设计如果需要更改一个新View,几乎要变动全部代码,而低耦合的设计例如三层架构,只需更改view即可。而不用管业务逻辑和底层。Xaml真正实现了UI与逻辑 的分离,Xaml是一种单纯的声明型语言,它只能用来声明UI元素,绘制UI和动画。根本无法在其中添加程序逻辑,这就强制地把逻辑代码从UI赶走了)

  1. 项目模板:其实就是要创建的项目是什么类型的。如Library类库, ConsoleApplication控制台应用程序,不同的模板,编译器会调用它和类库一起执行,变异成msil微软中间语言,然后通过clr公共语言运行库来执行中间代码,程序出不同的效果如类库,控制台程序。使用模板就是我们不用手动去配置自己要开发的东西和一些基本配置,省去了一些不必要的时间,提高了效率。
  2. 新建一WPF项目,会生成一系列的文件。

    ProPerties:放资源和配置信息。

    References引用类库。

    App.xaml,类似Winform中的program.cs,它指定了哪个是主窗口,程序的进程是谁。

    Window.xaml,我们要建的Wpf窗体都类似Window.xaml,xaml是设计UI的,可视化编辑,xaml.cs是后台代码。

  3. XAML代码分析:

    语法XML派生而来,所以遵循XML语法,标签必须闭合,每个标签声明一个元素(对应内存中的一个对象:XAML是"声明"式语言,当声明了一个标签就意味着声明了一个对象,对象之间的层级关系要么是并列要么是包含)。标签中有属性。

    非空标签:<Tag Attribute1="value1"></Tag>

    空标签:<Tag Attribute2="value2"/>

  4. 关于Property和Attribute

    Property是面向对象的范畴,是一个类的属性,如年龄,性别

    Attribute特征,语言层面上为了区分A和B加Attribute来区分,采用键值对,Attribute的范畴要大于Property。通常包含关系,因为大多数情况Property也是Attribute,即相互对应。

  5. 模板代码解析:

    如图:第四行就是顶级对象元素Window的属性。

         第二行第三行的"http://....."的地址其实并不是一个网站地址,它只是Xaml解析器的一个硬性编码(把他理解为C#的const常量即可),它代表了一系列的程序集,对应如下:

它主要是些绘制UI 的程序集,是表现层(Presentation)上的东西。

对应Xaml语言解析处理相关的程序集。

属性:xmlns="命名空间",

xmlns是XML-Namespace,继承XML语法,表示引用了一个命名空间,类似WinFrom的Using。

属性:xmlns:x="命名空间"

语法xmlns[:可选的映射前缀]="命名空间",(个人觉得类似Winform引用命名空间为了解决下图问题而是用的using Excel = Microsoft.Office.Interop.Excel;同时因为使用了前缀,每次调用这个命名空间下的类,接口和属性等等都要Excel。同理,如果Xaml命名空间加了前缀,调用标签元素或者属性也要如此,如<n:Grid n:Class>等等。这也是第一行Class前加n:的原因

每一个Xaml中仅有一个不带前缀的,那就是默认的命名空间,所以一般把常用的与UI有关的Presentation设为默认命名空间,其余的包括自己引进的都要加前缀,使用时也都要加前缀。

    Window x:Class="MyfirstWPF.Window1"是指要解析器把包含Class属性的Window标签编译成一个Window1类。同时我们发现后台也是一个Window1类,这说明他们都是不分类,类似Winform中的后台类与designer类。所以这个解耦与Winform原理是一致的。

小结:了解了这么多,突然发现,有扎实的Winform知识,理解WPF是非常有利了,他们在继承上和解耦思想上和使用上是如此的类似。但也有不同的地方,如Winform的designer文件仍是一个部分类cs文件,而WPF升级为一个Xaml文件,使用了XML语法,在标签顶级对象的Class中声明生成了这个部分类。而WPF替代WINform就有太多的原因了,文章也说了Winform是事件驱动,而WPF是数据驱动原理,符合哲学。较Winform更好的解耦,WPF跨平台,包括浏览器和移动开发。最后WPF在UI界面上更为漂亮,可以设计专业动画3d等等


----参考《深入浅出WPF》

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值