`
lovnet
  • 浏览: 6916448 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

深入浅出WPF(1)——什么是WPF

阅读更多
深入浅出WPF(1)——什么是WPF
小序:
Hi,大家好!几乎两个月没有写技术文章了。这两个月,我在学习WPF。回顾一下两个月的学习历程,有两个感觉——第一,WPF是一项非常实用又简单易学的东西,它将成为未来MS平台上快速开发的主流趋势;第二,WPF的学习比较讲求路径,如果没有一个比较好的路径,学习起来可能比较慢,主要原因是它像是一种ASP.NET与Windows Forms的“杂交品种”,里面有很多内容与前两者似像非像,同时还有很多新内容的引入。
本系列文章的主要目标是:帮助大家学习WPF技术,快速成为这项技术的开路先锋。在此,我借CSDN一块宝地,把这两个月来学习到的东西做一个整理,奉献给大家。希望大家能喜欢。BTW,本系列文章的风格将一改以前长篇累牍的样式,改变为非常短小的篇幅,每篇文章一两个知识点,小步快跑、天天积累。这样,我写着不累,你看着也不累。
在我两个月的学习中,我的同事们——Anstinus、 Mathew、 Allen、 ChengSong、 Edward和Mike——他们像战场上的战友一样给了我无数的帮助。在这里,我向这些同事表示深深的感谢和敬意。还有我的搭档——大美女Yan,和你在一起工作很开心。
正文:
什么是WPF
WPF,Windows Presentation Foundation也,译过来就是“Windows呈现基础”,你看它的目的非常明确,就是用来把数据“显示”给用户看的(说白了就是用来做UI的)。如果只是给用户显示几串文本、两三张图片或者几个表格那WPF就太糗了,幸乎,WPF可不是这等素食动物——大家都见过Flash动画吧,WPF的显示能力丝毫不亚于Flash以及Flash的同门师弟Flex+AIR(某建筑公司产品)。
为什么会有WPF
“微软出点儿什么新东西,我就得跟着跑!”我也曾这样抱怨过。不过,当大量的工作任务压在头上的时候,我终于感觉到——每一次技术(包括理念、架构、语言、工具)的更新都带来了巨大的工作效率提升。的确,我们需要花些时间来搞懂那些看起来乱糟糟的新概念,但搞明白之后——坦白地讲,在有人带的情况下,这并不是什么难事——我们就能用非常少的代码来换取先前技术大量代码才能获得的功能。似乎代码量是开发团队中一切糟糕问题的罪魁祸首,so,明白了?
对于WPF是如何减少代码量的,后面有一个例子。但WPF绝不是一个只能帮我们减少代码量的家伙,更重要的是,它还能帮我们把程序的界面和功能逻辑近乎彻底地剥离——in a nutshell,把你的程序变成一只香蕉或者橘子——“皮”是可以从“瓤”上剥下来的,一旦某天用户说:“这个橘子能不能看起来像是个香蕉?”你就可以为你的橘子瓣儿裹上漂亮的进口香蕉皮再开出一个更漂亮的价码。
WPF是怎样做到的
使用WPF技术开发产品,程序的“皮”,也就是UI,是使用XAML语言来“画”出来的;而程序的“瓤”,也就是功能逻辑,可以由程序员来选择使用C#/VB.NET/C++.NET等托管语言来实现。
对于程序员们来说,C#/VB.NET/C++什么的已经是耳熟能详。XAML是什么呢?简言之,XAML(读音为“zamel”,近似于“咋没有”)是XML语言的一个衍生物,它的语法基本上与XML语言完全一致;它的功能就是专门用来设计和实现程序的UI;它看起来和HTML语言非常像,无论你是程序员还是美工人员,只要你设计过网页,那学习XAML对你来说都是小菜一碟儿。而且,XAML可不像HTML和XHTML那样只能呆在Web开发领域——XAML对于Web开发和桌面开发是“通吃”的,从Web程序改成桌面程序或者反过来,所付出的工作量惊人的小,而且由于UI与逻辑完全分离,逻辑代码几乎不用改动——这意味着两种开发的边界渐渐消失,两类设计人员和程序员将会染指“彼岸”、拿到更多的项目、挣更多的钱。
WPF之前,无论是Win32 API编程、使用MFC编程还是Windows Form编程,美工(设计人员)设计出来的界面都需要由程序员使用Visual Studio来实现。程序员不是美工,VS也干不过PS……越俎代庖永远是高效分工的大敌。如今,为了支持WPF程序设计,微软推出了专门的、使用XAML语言进行UI设计工具——Expression Studio,使用它就像使用PhotoShop和Dreamweaver一样,设计出来的结果保存为XAML文件,程序员可以直接拿来用;当UI有变更时,程序员只消用新版XAML文件替换旧版即可。
XAML小试牛刀
让我们实现这样一个小小的需求,完全使用XAML代码而不需要C#来参与。用户需要一个窗口,里面有一个TextBox和一个Button,并且窗口的背景是蓝色的过渡色。
WPF_1_1
我保证:真的一行C#代码都没写!是不是足以让Windows Form程序员艳羡不已?!
一切实现都是使用XAML语言完成的——你可以使用Visual Studio 2008的XAML设计器来完成,也可以使用Expression Studio来更专业地完成设计。下面是它的XAML代码,你现在只需要看个大概,后面的文章里,我会一个词一个词为你解释。

<Window x:Class="WpfApplication1.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<Grid>

<Grid.Background>

<LinearGradientBrush>

<GradientStop Offset="0" Color="Blue"></GradientStop>

<GradientStop Offset="0.5" Color="LightBlue"></GradientStop>

</LinearGradientBrush>

</Grid.Background>

<TextBox Height="23" Margin="10,10,10,0" Name="textBox1" VerticalAlignment="Top" Text="Hello WPF!" />

<Button Height="23" HorizontalAlignment="Right" Margin="0,40,10,0" Name="button1" VerticalAlignment="Top" Width="75">WPF</Button>

</Grid>

</Window>

咱们再来一个例子:这回的需求是这样的——UI上有一个TextBox和一个Slider,要求Slider的滑块滑动时TextBox的文本显示Slider的值;当TextBox里的文本改变时,就让Slider的滑块与之同步。

对于一个有经验的Windows Form开发老手来说,他的思路是这样的:
  1. 在UI上拖放控件
  2. 为Slider的ValueChanged事件添加响应函数(事件处理函数),函数中将Slider的Value属性(double类型)转换成一个string类型的值并赋给TextBox的Text属性。
  3. 为TextBox的TextChanged事件添加响应函数,对TextBox的Text属性进行检验,看看它是否能解析为一个double值(新手常常忘记这一点而导致bug)并且落在Slider的取值范围内,如果一切顺利,就把它赋给Slider的Value属性。
Now,你是一个WPF新手,但你可以做的比一个Windows Form老手还好!请打开Visual Studio 2008,新建一个WPF Application,然后把下面的代码copy到XAML设计器里。

<Window x:Class="WpfApplication1.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<Grid>

<Grid.Background>

<LinearGradientBrush>

<GradientStop Offset="0" Color="Blue"></GradientStop>

<GradientStop Offset="0.5" Color="LightBlue"></GradientStop>

</LinearGradientBrush>

</Grid.Background>

<TextBox Height="23" Margin="10,10,10,0" Name="textBox1" VerticalAlignment="Top" Text="{Binding ElementName=slider1, Path=Value, UpdateSourceTrigger=PropertyChanged}" />

<Slider Height="21" Margin="10,40,10,0" Name="slider1" VerticalAlignment="Top" Maximum="100" />

</Grid>

</Window>

看你,你也可以一句C#代码都不写就完成漂亮的程序!
WPF_1_2
我猜已经有同学开始“晕代码”了。完全没有必要!这些代码80%都是VS自动生成的,而且它们的结构的非常简单——箱子里装着一个口袋,口袋里装着两个核桃。上面这段程序最重要的一句就是:Text="{Binding ElementName=slider1, Path=Value, UpdateSourceTrigger=PropertyChanged}"即可以说它是WPF最精华的部分,也可以说它是与Windows Form开发相比变化最大的地方,它就是——Data Binding(数据关联)。这两个月来,我几乎天天与这个东西打交道。后面的文章中,我们将仔细学习如何使用它。
TO BE CONTINUE...
=================================
四川地震灾情牵动着每个人的心,请大家向我们受灾的兄弟姐妹们伸出援助之手,因为我们都是中国人!
分享到:
评论

相关推荐

    深入浅出WPF-刘铁猛-MVVM视频源代码,MVVM入门与提高视频对应的源代码

    **深入浅出WPF——MVVM模式解析** 在软件开发领域,Windows Presentation Foundation(WPF)是Microsoft推出的一种用于构建Windows桌面应用程序的技术,它提供了丰富的用户界面和图形渲染能力。而MVVM(Model-View-...

    WPF编程宝典——C# 2010版源码

    《WPF编程宝典——C# 2010版》这本书深入浅出地介绍了WPF的各种概念和技术,通过源码的学习,我们可以更直观地理解并掌握这些知识。 1. **XAML基础** XAML(eXtensible Application Markup Language)是WPF的核心...

    C#深入浅出全接触.pdf

    ### C#深入浅出全接触 #### 一、C#简介 C#是一种由微软公司开发的现代化编程语言。作为一种衍生自C和C++的编程语言,C#继承了C++的强大功能,同时具备像VB一样的简洁易用性。对于Web开发而言,C#与Java相似,但在...

    WPF编程宝典--使用C#2012和.NET4.5源码.rar

    在《WPF编程宝典》一书中,作者深入浅出地介绍了如何利用C#2012和.NET Framework 4.5来开发高质量的WPF应用程序。通过源码分析,我们可以更好地理解和学习WPF的核心概念和技术。 1. **WPF基础** WPF的核心在于XAML...

    WPF 揭谜中文版,助你进入WPF殿堂

    本书“WPF揭谜中文版”深入浅出地介绍了这一技术,对于想要学习或提升WPF开发技能的程序员来说,是一份宝贵的学习资料。 WPF的主要特点包括: 1. **XAML语言**:XAML(eXtensible Application Markup Language)是...

    c#深入浅出,赛狗日

    《C#深入浅出——赛狗日》项目详解 在这个名为“赛狗日”的项目中,我们探索了C#编程语言的深度应用,通过实际的赛狗比赛模拟系统,展示了C#在游戏开发、事件处理、图形用户界面(GUI)设计以及数据管理等多个方面...

    C#深入浅出--入门者先看

    ### C#深入浅出——入门者先看 #### 一、C#简介 C#(发音为“C sharp”)是一种由微软公司开发的面向对象的编程语言,它结合了C和C++的强大功能,同时也拥有类似Visual Basic的易用性。C#的设计初衷是为了更好地...

    C#应用程序开发全程演练——从灵感到实现

    另外,还会深入浅出地讲解Lambda表达式和 LINQ(Language Integrated Query),这两者极大地简化了数据操作和处理,是现代C#开发中的重要工具。 在实际开发中,Windows Forms和WPF是常用的C#图形用户界面(GUI)...

    Windows Presentation Foundation 程序设计指南 源码

    配合标签“WPF”、“Charles Petzold”(知名.NET开发者)和“net”,我们可以推测这本书可能由查尔斯·佩佐德撰写,他是.NET领域的一位权威作者,他的著作通常深入浅出,适合初学者和有经验的开发者。 通过研究这...

    net游戏编程源入门经典——C#篇源代码

    《NET游戏编程源入门经典——C#篇》是一本针对初学者的游戏开发指南,主要以C#编程语言为工具,深入浅出地介绍了如何利用.NET框架进行游戏开发。这本书不仅涵盖了游戏开发的基础知识,还提供了丰富的源代码示例,...

    精通c# 5.0与.net 4.5高级编程 PDF文件和源代码

    《精通C# 5.0与.NET 4.5高级编程》是一本深入探讨C#编程语言和.NET Framework 4.5平台的权威著作。这本书旨在帮助开发者掌握C# 5.0的关键特性,以及如何利用.NET 4.5框架进行高效、高质量的软件开发。书中涵盖了一...

    C#编程入门教程:从开发环境到面向对象概念详解

    最后,深入浅出地讲解了C#基础方法的知识和面向对象的概念(封装、继承、多态)。此外还涵盖了数组的相关知识。 适合人群:初学者或者对C#感兴趣的技术人士,尤其是那些打算从事.NET平台软件开发的学习者。 使用场景...

    【原创】Kinect开发入门资源合集

    他的教学视频《Kinect 應用程式開發入門——曹祖圣》深入浅出,覆盖了各种常见应用,是学习的绝佳材料。圣哥的资讯站(http://teacher.syset.com)也提供了丰富的连载教程,如《Kinect for Windows - 体感应用程式...

    Pro.C#.5.0.and.the..NET.4.5.Framework,.Andrew.Troelsen

    本书深入浅出地解释了如何使用WCF来创建健壮的、可扩展的服务端应用,并介绍了如何处理安全性和事务等问题。 ### 9. 工作流(WF) 工作流(Workflow,WF)是一种业务流程管理工具,它可以帮助开发者定义和执行复杂...

    Visual.Csharp.2008从入门到精通

    这本书覆盖了C#的基础知识、高级特性以及实际项目开发技巧,通过深入浅出的讲解和丰富的实例,使学习者能够快速上手并逐步提升编程能力。 1. **C#基础知识**:C#是微软公司推出的一种面向对象的编程语言,它具有...

    Visual C++ .NET编程实例pdf

    这本书深入浅出地介绍了如何利用.NET框架和C++的强大功能来构建高效、可扩展的应用程序。在深入探讨之前,我们首先需要理解几个关键概念。 1. **Visual C++ .NET**: 这是Microsoft Visual Studio的一部分,它为C++...

    北大青鸟C#课件系列

    这个系列的课件深入浅出地讲解了C#编程语言的基础知识和核心概念,旨在帮助学习者快速掌握这门强大的.NET平台开发工具。 在C#的学习过程中,首先会接触到的是C#的基础语法,包括变量、数据类型、运算符、流程控制...

    C#俄罗斯方块(陈广老师)

    这个教程由知名的陈广老师主讲,他以其丰富的教学经验和深入浅出的讲解方式,将带领我们一步步构建这个游戏。 首先,我们要理解俄罗斯方块的基本规则。游戏的核心是不同形状的方块,它们会从屏幕顶部逐渐落下,玩家...

Global site tag (gtag.js) - Google Analytics