WPF Control Development Unleashed 章节一 WPF的设计理念(未完待续)

2017-09-07 19:50:52来源:CSDN作者:qq_37429590人点击

分享

章节一 WPF的设计理念

想像你是一个技术相当成熟的设计师,你被要求在空地上盖一座房子.你看看附近的建筑物确保你使用的外部的颜色不与邻居的冲突.当你完成你的新房子大作之后,你退后一步,被你完成的东西惊呆了.房子拥有辉煌的四层结构和巨大的开放式玻璃幕墙,周围的美景一览无余.房子的其他部分有许多很棒的功能,比如门廊,窗台,阳台,天窗,几乎所有东西都是新房主想要的.

六个月的时间过去了,你接到一通电话,说你的极好的的房子已经基本被夷为平地.事实证明,在你对邻居的最初评估中,你没有考虑太多事实.房子是由厚砖(准确的预防飓风)窗口,没有天窗,没有阳台.此外,这些房子主要是有坚固地基的地下室的牧场.你没有考虑到当地的设计理念.忽略了这一点,你没有意识到该地区的雨季会经常遭受暴雨,飓风和龙卷风.没有考虑其他的房子为何按照他们的方式造在那,你建造的房子看起来不错,但它没能撑过雨季.

在构建软件时也经常犯类似的错误.当你构建应用程序的时候考虑使用framework中相似的类作为的框架.当然,因为wpf内部的工作原理和它的设计理念,这样做会产生不能用,不稳定,或低效率的风险.

在此之前,我们可以展示一行Windows Presentation Foundation(WPF)的代码或标记,我们要确保你理解WPF应用程序的工作方式以及无数的运动组件在WPF应用程序的交互方式和它产生的用户体验和操作.理解WPF的设计理念将使你未来的WPF应用程序更可靠,更健壮,用户体验更好,因为你不太可能在飓风频发的地方建造玻璃房子.

本章中简要概述的主题将在本书余下的篇幅中详细介绍,到最后一章时,它将成为你的第二观念.

数据和行为

用户界面都是体现在数据上并处理数据.本节将讨论您通常会看到的不同类型的数据,以及与数据交互的概念(又名动作).

当用户查看应用程序时,他们会看到他们感觉上是完成特定任务的相关信息.不管任务是消灭雷达上最近的飞船的或进入另一个项目的应付帐款表,你的用户看见信息,思考基于潜在的提示互动信息.你是什么?开发者.你经常看到的是行,列,斜度,小格子,按钮,列表框,滚动条,以及更多.无论是不是用户,通常都不会花时间去思考,开发者视图和用户看到的之间存在着不同的层次.实际上,我们可以将这些层分解为两大类:数据和行为.

当我们构建用户界面时,我们通常要做的就是在数据之上加上一层皮肤.数据可以是来自高级模型对象(如客户或简单布尔值)的所有数据.数据是我们的用户界面最大的影响者,可以有多种形式.下面是由现代应用程序提供的主要数据类型的列表:

原始数据–原子数据处于底层,包含字符串,布尔值,整数和十进制值等类型.

集合数据–集合中显示的数据,这种数据能包含相同或不同的数据类型,包含数组,列表等.

分层数据–可由分层层次结构表示的数据的复杂图形,如树或列表,图表等

复合数据–由以上几种类型的数据组成的数据

随着用户界面(UI)和数据访问技术的增强,原始数据到呈现数据变得越来越容易.windows窗体允许我们拖放单个控件,并快速将控件指向底层数据以呈现它.然而,在windows窗体中构建自定义控件是一项复杂的任务,需要有图形设备接口(GDI)大师级的技巧.WPF击中甜蜜点,给开发商的灵活性,同时还使它容易从数据呈现的输出.

构建用户界面的时候,我们总是错误地认为它是按钮或网格或ListView,这是最关键的.然而,并不是按钮是王道,而是按钮允许用户做什么才是王道.这意味着采取行动,以回应所提出的数据.这些是应用和控制行为.

与UI控件的交互不仅仅限于鼠标单击,除了能够反应键盘热键,现代的用户界面可以应对复杂的手势用鼠标以及替代输入设备如笔(如从Wacom数位板笔),探针,甚至用户的直接触摸.

真正的伟大用户体验来自于开发者在数据和行为之间达成一致.以下部分的章节提供的术语介绍使用WPF处理数据和行为,每个架构和设计理念都包含在WPF的环境中.

数据工作

在这里,我们将深入探讨如何在WPF帮助转化的原始数据转换成一个耀眼的直观表示.

数据几乎可以采用任何形式–从一个单一的数字到一个包含客户,订单和订单项的客户或整个复杂图形的模型对象.这意味着显示数据的任何UI控件都需要能够处理任何类型的数据.

这是症结所在,为什么那么多的UI框架历来如此难用,为什么WPF是如此强大.任何WPF控件假定其内容的默认数据类型System.Object.如果控件的内容可以是任何数据类型,那么控件如何知道如何呈现它们自己的内容呢?如何通过控制层次WPF采取任何类型和流的原始数据和最终转换成可见的东西,并响应用户的交互呢?

第一个答案是通过使用模板.

模版

把模板看作饼干切割器,每当WPF需要一个新的饼干,它要求一个模板印一个.然后模板把印好新形状的面团给WPF.WPF烘烤饼干后,把它拿上热气腾腾的用户界面.WPF为饼干和面团提供了两种不同的模版–控制模版和数据模版.

控制模板在WPF想要的可视化表示的控制.此模板与用户界面完全相关,一般不涉及任何数据.

一个数据模板时使用WPF有一块原始数据,需要知道如何表示数据.在这种情况下,您可以将数据看作饼干和作为饼干的数据模板.最终结果,在饼干切割机(模板)之后.在面团中(数据)是开发人员提供的数据的可视化表示.

例如,假设你有一个Person对象作为原始数据,作为一个WPF开发的开发者,你可以提供一个数据模板,表明一个人的名字应该出现在一个文本框,脸应该出现在面板的左上角的一个小的图像,和其他个人信息应该出现在滚动区域的右侧面板.WPF让原始数据和关系直观的展示出来.

演示器

到目前为止,我们只有一小块照片.我们知道,控件模板用于形成控件的基本外观,而数据模板定义了需要显示特定数据的方式.然而,我们如何从一个数据模板到一个可视化表示呢?答案是一个内容演示器.内容演示器创建屏幕内部,其中提供由数据模板指定的UI.

主持人允许开发人员轻松创建复杂的可视化,WPF还允许您使用低级别的图形元素来构建你的用户界面.在这里,您可以创建自己的行,多边形,椭圆,圆弧,自定义文本等.在某些情况下这些技术是有用的,你的指尖下拥有所有这些工具使WPF功能非常强大.

绑定和转换器

我们已经看到了可以表示的不同类型的数据,以及可视化描述这些数据的数据模板机制.但是,我们需要一些胶水把它们连接起来.这种胶水就是数据绑定.WPF的数据绑定比许多其他的UI框架更强大,因为它可以是单向的或双向的.当绑定对象更改时,UI可以自动更新自己,并且数据对象可以根据用户操作立即更改.在您的应用中,WPF数据模板能提供您所有需要的灵活性来形象地表示任何形式的数据

有时候,模板需要呈现的数据并不是一种用户友好的格式.例如,您可能将一个电话号码存储在数据库的字符串中,该字符串没有括号和破折号,但您希望将该字符串以括号和破折号的格式呈现给用户.您不仅可以把给定类型的数据转换为其他类型的数据,事实上,您可以将任何一段数据转换为任何表示形式.常用的方法是将布尔值转换成像彩色灯泡那样的图像,将数字转换成适当的货币形式,甚至将一系列数字转换成多行的点来创建行图.从数据到演示,从数据绑定提供的通道到从数据到数据,都可以调用转换器.

布局

最后,一旦模板被清除,数据被插入,转换器被调用,表示容器已经创建,在用户看到任何东西之前还有最后一步,布局.

布局为前面步骤中创建的所有UI控件提供了大小和位置.它还用于组织和维护相关元素.

在WPF布局步比看起来是因为更重要的是,如果你处理得当,你创建的WPFUI完全不依赖于分辨率.这使得布局步骤非常重要,因为布局步骤变成了模板和呈现器定义的相对坐标和相对大小信息成为用户屏幕上实际物理像素坐标的步骤.

在WPF中,面板和类,由它负责提供布局功能.它们负责将相关元素分组(通过将相关控件存储为面板的子元素),并指定包含在其中的元素的最终大小和位置.


布局是一个ui元素的特征
虽然面板使它更容易布局你的用户界面,请注意,可视化树的每一UI元素都参与了布局,没有布局,屏幕上就放不了UI元素.

最后,一旦面板确定了布局的发展方向,以及布局的规模,所有内容摆放的位置.窗口是一个顶级容器,充当可视化树的根.可视化树在本书中有详细的解释.需要在屏幕上显示的数据最终在一个窗口中驻留,该窗口通过数据模板,放置在展示容器中,最后才通过布局容器.

样式

在整个数据链从原始数据对象通过逻辑组织元素到视觉呈现元素的整个事件链中,我们能够决定控件的样式.样式在WPF中充当的角色类似于Web应用程序中的css. 样式可以在任何级别应用,从模板到内容演示器到布局面板,这样您就可以为相关元素提供一个高内聚的外观和感觉.它们提供了一个抽象类,它集合了元素的所有属性,从而使这些相同的属性可以应用于整个应用程序中的多个元素,而不必为每个控件单独指定.样式从资源字典中加载,它可以在元素层次结构,应用程序级别或主题级别的任何地方加载.默认的样式决定了WPF应用程序的默认的外观和感觉,这是在一个单独的程序集中定义的.

图1.1 总结了原始数据通过数据模板,转换器,数据绑定,演示程序和布局面板的流程,最终形成了一个有形的用户界面.

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台