WPF控件开发指南 1.1

第一章:   wpf 设计之道

假设你是一个建筑师,你被要求去一个豪华的地区的空地上去建造一座房子。你环顾四周以此来确信你房子四周使用的颜色避免与他人的颜色搭配冲突。当你把自己的房子建好后,不禁对着这房子感叹,真是一个杰作啊!它是一个四层结构周围是巨大的玻璃墙的漂亮的房子,这样我们就可以看到更多周围的环境。房子还有其他突出的特点,它有一个开放的门廊,一个向外凸出的窗户,阳台,天窗,只要是你想要的它都有!

 

6个月后你接到一个电话说你建造的那个杰作般的房子现在只剩下砖瓦碎石了.事实上是这样的,在你开始的判断中,你没有考虑这样一个事实,这里所有的房子都是用那种极其厚的砖头(更确切的说是能抵抗台风的砖头)墙构成,他们没有天窗,没有阳台,而且这里的房子由很强的地基组成主要用来作为牧场使用。你没有纳入考虑范围的是这地区的设计特点.因此当你忽略了这个因素之后,你没有意思到,当雨季来临时,这个地区频繁被暴雨,狂风和各种龙卷风光顾。因为不知道别人的房子为什么要建造成那样,你建造的房子看起来很好,但是在雨季中却没能幸存下来

 

软件开发中,我们也会犯通用的错误。类比一下,那个地区就好像我们开发应用程序的框架。当然我们可以在框架之上建立应用程序,不用去理解它内部工作和它设计理念,可是这样做出来的应用程序不可复用,不稳定,效率大打折扣!

 

在此之前,我不会显示一段wpf代码或标记,我想您去知道为什么wpf的应用必须那样工作以及无数的组件之间交互后来响应最终用户的体验和用户操作。

 

只有理解了wpf设计思想之后,你才能让您的wpf程序设计的更可靠,更健壮,更好的用户体验。因为你再也不会去在一个经常刮台风的地区去建一个玻璃房子

 

以上所讨论的主题以及本章总结将会在全书一直体现出来,它将会始终围绕着你直到本书的最后一章

 

数据和行为

用户界面关心可视化展现数据和界面交互。这部分关注不同的数据和数据交互的概念。当用户使用一个应用程序时,他们看到的信息更多是通过做一件事的过程中。在这个过程中,是否这个任务是正在消灭一个雷达屏幕上指示的飞船,还是在进入一项支付账单业务,用户看到的信息,内容,提示用来给用户提供潜在的交互功能。而你呢,开发者,经常看到的是表格的行,列,渐变,单元格,按钮,下拉列表框,滚动条,其他。不管是你还是最终用户经常思考的问题跟这差不多,开发者之间的观点以及用户之间的观点都是不尽相同的。我们吧这些层分解成两大类:数据和行为。

当我们开发用户界面,一般做法是在数据是加一件皮肤。数据可以是任何形式,从高级的对象模型如Customer类到一个简单的Boolean值。数据是唯一的最大的影响着用户界面的因素,而且有很多形式。下面是主流应用程序的数据类型

.           Primitive data(常用数据)最底层原子级别数据, 包括string, booleans, integers, decimal.

.           List data(列表数据)像集合. 这些数据类型可能是相同或变化的数据类型包括数组,列表等等.

.           Hierarchical data(分层数据)复杂的图形数据表现起来是层级结构,像树,链表,图形等等

.           Composite data(组合数据)由任一上面所述数据组成

 

working with data(实在不好翻译,不知道译成啥才好,所以用英文)

UI和数据访问计数增加,很容易就可以获取原数据后展示输出。winows forms容许我们拖放控件展现它。然而,在windows forms中开发控件是一项复杂的任务并且需要对gdi有很深入的了解。wpf为开发者扫清了障碍,它体统灵活的方式来开发从数据到展现的控件

当开发用户界面时,我们经常犯这样的错误,总认为buttongridlistview才是最重要的。然而,不是这样的。button能让用户做什么才是最重要的。这表示对数据作出反应也就是展示出来。这是应用程序和控件的行为。

 

UI控件的交互不仅仅限于鼠标操作上。另外,为了对键盘热键作出反应,最新的用户界面能对鼠标作出的复杂动作以及输入设备(输入笔和输入板)作出响应,以及触摸响应。最好的用户体验是当开发者很好的融合数据和行为后。下面的部分提供一些介绍wpf术语用来处理数据和行为以及架构和设计理念的上下文。

 

下面我们将深入进去钻研wpf怎样帮助我们将原始数据转换成绚丽可视的展现效果。

 

数据可以是任何形式的。从数字到模型对象比如customer或者是整个复杂的图表包括用户表,订单表,订单明细表。这表明任何显示数据的UI控件必须能够处理任意类型的数据。这是问题的核心所在,这也是为什么在过去这么多UI框架难以使用的原因,这也是wpf强大的地方。很多WPF控件假设它的默认数据类型是System.Object 对象。如果一个控件的内容可以是任意数据类型,那么控件怎么知道如何去展现他们的内容呢?那么wpf是怎样将任意类型的原数据,然后将数据流流过控件的层级结构(hierarchy),最终将数据转换成可视化的,明确的,对用户交互作出反应的呢?

 

第一个答案是通过模板

模板

模板就像曲奇刀.wpf需要一个新的小甜饼时,它会找模板要.模板就用生面团压出一个新的模型出来给wpf,wpf接着烤熟那个小甜饼后给用户一个新鲜的用户界面.wpf提供两种不同的模板用来操作两种不同的曲奇面团,控件模板和数据模板.控件模板是用来给控件做可视化展现的.这类模板至于用户界面有关,总体上来说不参与数据交互.比如,button控件的默认模板就像一个有着圆形边缘的矩形.

数据模板适用于当wpf程序有原始数据并且需要展示数据时.你可以想象数据就像做小甜饼的生面团,数据模板就像曲奇刀.结果是,当把曲奇刀(模板)压入生面团(数据),程序员提供的数据就可以被可视化展现了

比如,你有一个Person对象作为你的原始数据,作为一个wpf开发者,你提供了一个数据模板,该模板指示这个person的名字必须显示在一个textbox,这个person的头像必须显示在面板的左上角图片控件中,其他信息应该显示在右边面板中的可滚动的区域.wpf利用原始数据然后将一一对应的直观展现.

 

展示器(Presenters)(恕我翻译不准,还是看英文好点)

迄今为止,我们只是有一点概念.我们知道控件模板是用来为控件组成基本可视化,数据模板定义了一部分数据该怎么展现.然而,我们怎么让一个数据模板向可视化转换.答案就是内容解析器,内容解析器用来在屏幕内部创建数据模板展示的经过UI指定的图像

展示器容许开发者来轻易的创建复杂的图形.同时也容许你用原始的方式来创建你的UI.你能创建自己的线条,多边形,椭圆形,弧线,自定义文本,等等.上面的每个技术在一定的场景下会非常有用,如果掌握了他们会帮助你开发强大的wpf应用.

 

绑定和转换

我们看到不同类型的数据能被展现,数据模板的机制直观的描述了这些数据.我们需要一些必须的粘合剂来连接他们.这就是数据绑定.数据绑定在wpf中相比较于其他的UI框架而言是非常强大的,它可以是单向或双向的.前端的UI会自动更新它自身当绑定对象改变后,数据对象也会在用户操作后对其自身进行改变.wpf中的数据模板提供了所有的灵活性用来在你的应用中的数据直观展现为任意形状.

有时,模板里要展现的数据并不是以用户友好的形式存在的.比如,你想去存储一个字符串形式的电话号码在数据库,这个电话号码不应该有括号或破折号.但是你想讲呈现给用户看到的格式是有括号和破折号的.你被限制在数据格式转换之中.实际上,你可以转换任意类型数据去展示.常用做法有转换一个boolean值为图像,就像色光.转换数字为金融货币格式,甚至转换一系列的数字为被用来创建现行图形的点.转换数据绑定的通道中都可以被调用,可以在数据到展现的过程和展现到数据的过程都可以被调用..

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值