04 2008 档案

摘要:4月30号一定要把控件篇写完,还剩60个Sample; 然后五一3天假赶出来绘图12个章节82个Sample,顺带把Globalization剩下的不到10个例子也写出来; 这样就只剩下: Core 36个 MigrationInterop 16个 Accessibility 9个 Editing ... 阅读全文
posted @ 2008-04-28 09:10 包建强 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 摘要: 这是《我佩服——WPF深入研究》的第四章,包含51个示例的研究。Layout布局看似简单,其实里面有很多技巧,本文在介绍这些布局面板的同时,还讲解了如何自定义一个Panel,以及实现它的MeasureOverride和ArrangeOverride。此外,还涉及到IScrollInfo接口,ScrollViewer的使用方法,Thickness转换器。 阅读全文
posted @ 2008-04-27 19:58 包建强 阅读(7686) 评论(8) 推荐(0) 编辑
摘要:最近闷头写书,所以一直泡在博客园,发现很多博客园需要完善的地方,既然dudu要做大,那么就一定要有自己的特色,而不是要盲从于CSDN或其他技术论坛社区。以下是我这几天忽然想到的,口口(以下删去2个字)贡献出来,希望cnblogs敢于尝试,充分利用手中的资源,走出一条自己的路来。 这篇文章并不只是写给dudu的,希望大家如果有其他想法都可以留下来。 阅读全文
posted @ 2008-04-26 17:44 包建强 阅读(4508) 评论(43) 推荐(0) 编辑
摘要:这是《我佩服——WPF深入研究》的第三章,包含14个示例的研究。这一章比较怪,都是以FlowDocument为主题,进行布局设计,同时对TextBlock进行了详尽的分析。很多不常见的类出现在这一章的例子中。 阅读全文
posted @ 2008-04-22 23:49 包建强 阅读(6111) 评论(7) 推荐(0) 编辑
摘要:记得这两套书还是在高二时买的,花了1000大洋,那时候家里还很穷,心中很是内疚。 一直有个梦想,安身立命之后,可以静下心来,好好读一遍这两套书,写一份长长的读书笔记——希望若干年后可以实现。 这两位作家是我最喜欢的,此外还有莎士比亚,他的戏剧我在高中的时候都读过一遍的。 短篇我喜欢莫泊桑、欧亨利、梅里美以及茨威格,我都有买过他们的全集,对于契诃夫,我不是很喜欢,也许是国人对他捧得太高,我就是觉得他... 阅读全文
posted @ 2008-04-20 20:42 包建强 阅读(2033) 评论(15) 推荐(0) 编辑
摘要:一直酝酿写一篇文章,详细地介绍WPF数据绑定的所有技术,尽量不要有遗漏。为此详细分析了SDK中的32个示例,作为《我佩服——WPF深入研究》的第二章。应该是全了。希望读者读完这篇文章不会再有数据绑定的困扰。 阅读全文
posted @ 2008-04-15 23:10 包建强 阅读(11550) 评论(15) 推荐(2) 编辑
摘要:早就计划写一本书,书名都起好了《我佩服——WPF深入研究》,基于MS于2005年发布的WPF SDK442个Sample,逐个研究一遍,控制在25章左右。于是就有了眼前这一章,我整整写了两周。写作的过程也是一个自我提高的过程,使我从示例中又学到了很多东西,而这些,在一般书籍上是看不到的,尤其是PageFunction结构化导航和CustomContentState定制导航这两套技术。今天共享出来,希望大家斧正。 阅读全文
posted @ 2008-04-08 21:02 包建强 阅读(7752) 评论(10) 推荐(1) 编辑
摘要:这套读书笔记是我逐字逐页的阅读Jeffrey Richter的《框架设计 CLR via C#》时做的笔记,从第1章到第18章,后6章的笔记我还在整理之中,希望能对大家有所帮助。毕竟那是一本很深很深的书,读起来是比较吃力的。希望大家能坚持读下去,或者没有读过的也一定要读一读,尤其是研究.NET3.5的朋友,务必要先读完这本书,因为这是.NET Framework的的基础。.NET版本再升级,这些核心的技术是不会变的。只有立足于此,才能以不变应万变,不为微软技术的升级所困惑。而且,深入了解CLR底层,研究WPF、WCF、WF、LINQ时才会事半功倍。我也是.NET3.5所有新技术的粉丝,我是深深领会到了苦练CLR内功的好处了。 阅读全文
posted @ 2008-04-05 21:20 包建强 阅读(6845) 评论(12) 推荐(1) 编辑
摘要:翻译 Programming Windows Presentation Foundation (2005) - BBL ——这本书我用了3周时间翻译,处女作,一稿,有很多地方还需要推敲。 阅读全文
posted @ 2008-04-04 14:50 包建强 阅读(6310) 评论(21) 推荐(2) 编辑
摘要:WPF提供了一个范围的高质量生成和合成服务。一组形状元素支持各种的绘图基础。一些笔刷类型是可利用的,对于决定如何绘制形状,以及钢笔,增大了笔刷来定义如何绘制轮廓。转换在所有级别都是被支持的,使得缩放用户界面到任意分辨率和大小变得更容易。你可以集成视频和3-D内容到你的应用程序中。以及一个低层次的API是可用于在必要的时候,工作在可视化层次。 阅读全文
posted @ 2008-04-04 14:38 包建强 阅读(642) 评论(1) 推荐(0) 编辑
摘要:控件是由应用程序创建的块。它们描述了用户用来交互的界面特征。控件提供了行为,依赖样式和模板来表示一个外观。输入由事件和命令处理,这使用了一个路由系统来允许简单的、一致的事件处理,而不顾用户界面的详细结构可视化可能是多么复杂。WPF提供了一组内嵌控件,基于普遍使用于Windows应用程序中的控件。 阅读全文
posted @ 2008-04-04 14:09 包建强 阅读(652) 评论(2) 推荐(0) 编辑
摘要:WPF提供了一系列内嵌控件。其中大多数符合标准的你已经熟悉的Windows控件类型。注意到没有一个是包装在旧的Win32控件外面的控件。虽然它们看上去就像是它们的副本,它们都是与生俱来的WPF控件。这意味着它们为WPF在本书中描述的功能提供了完全的支持,包括样式、独立的分辨率、数据绑定、合成、以及充分的集成支持WPF的图形化能力。 3.3.1按钮 按钮是用户可以点击的控件。点击的结果由应有程序的开... 阅读全文
posted @ 2008-04-04 14:03 包建强 阅读(2354) 评论(3) 推荐(0) 编辑
摘要:在Windows应用程序中,又3种基本的用户输入形式:鼠标、键盘和手写板。同时,还有一种更高级输入方式,其可能来自快捷键、工具栏的按钮、菜单项。 尽管控件担当着主要的输入对象,用户界面的所有元素都可以接受输入。不必吃惊,这是因为,为了提供外观,控件完全依赖于底层元素的服务,如Rectangle和TextBlock。因此,在用户界面内的元素类型中,所有的输入机制都是有用的,我们将要在接下来的章节介绍... 阅读全文
posted @ 2008-04-04 13:10 包建强 阅读(1692) 评论(3) 推荐(0) 编辑
摘要:对于一个应用程序而言,控件是搭建用户界面的积木。它们具备交互式的特征,例如文本框、按钮以及列表框。尽管如此,WPF还有点不寻常,在于其并不直接地依赖其外观。在自定义一个控件外观时,很多GUI框架要求设计人员编写一个自定义控件。在WPF中,这是不必要的:嵌入式内容和模板提供了简单而强有力的解决方案。仅当你所需要的控件,其行为在已有嵌套式控件中不存在时,才需要重新去开发。 很多WPF用户界面元素并不是... 阅读全文
posted @ 2008-04-04 13:05 包建强 阅读(1601) 评论(2) 推荐(0) 编辑
摘要:Windows应用程序为用户交互提供了一个图形化的界面。大多数的用户都熟悉普遍的GUI样式。例如,他们认为按钮可以点击,知道在文本框输入文本。这些样式通常由很多可视化的独立“模块”组成。例如,一个文本框包括:外面的矩形边框,一列代表文本的字符,以及一个闪烁的竖线,用来表示下一个字符出现的位置。用户认识到,这些“模块”构成了一个个提供特定功能的单一实体。在WPF中,这些复合的实体被称为控件。 ... 阅读全文
posted @ 2008-04-04 12:55 包建强 阅读(791) 评论(2) 推荐(0) 编辑
摘要:根本上讲,数据绑定是关于在一个地方保持数据,例如,在另一个地方,一个控件的属性,在数据上同步一个对象的属性。在这一章,我们从深度和广度上遍历了数据绑定引擎这一基础概念,以及大量牵连到的,包括基于对象和XML数据格式的条目和列表,基于数据目标的条目和列表,管理当前项,值的转换,排序,过滤,数据模板,甚至主从页面的关系。 在WPF的每一层对数据绑定的彻底支持,使之成为优秀的样式,在某种程度上数据绑定并... 阅读全文
posted @ 2008-04-04 12:54 包建强 阅读(562) 评论(2) 推荐(0) 编辑
摘要:我们已经看到绑定一个单独的对象,还看到绑定一个单独的对象列表。另一种非常流行的方式是绑定多个对象列表,尤其是相关的列表。例如,如果你向用户显示一个客户列表,当他们选中其中一个客户,就会显示客户的相关订单,这时,你就会使用主从复合绑定。 主从复合绑定是一种过滤的形式,在主页面的列表部分,客户452设置了过滤器作为联合到从页面数据的参数,例如,客户452的相关订单。 到我们目前的讨论为止,我们并没有客... 阅读全文
posted @ 2008-04-04 12:53 包建强 阅读(1139) 评论(3) 推荐(0) 编辑
摘要:目前为止,我们已经简单的处理了对象。然而,这并不是数据的唯一来源;XML和突然想到的相关数据库,都是流行的选择。更进一步地,由于XML或 相关数据库并不能存储数据为.NET对象,某些转换可能需要支持数据绑定,正如你会想到的,需要数据源对象上的.NET属性。而且即使我们可以直接在xaml中声明对象,仍然希望有一个层间接地从其他源中拉数据,甚至于将这个工作交给一个工作线程,如果说取回是一个呆板的操作。... 阅读全文
posted @ 2008-04-04 12:46 包建强 阅读(1132) 评论(3) 推荐(0) 编辑
摘要:目前为止,你已经看到一些示例将控件绑定到一个单独的对象。然而,更复杂的使用是绑定到一个对象列表。例如,想象一下,我们的对象数据源可以创建一个新类型表示Person对象的列表,正如示例4-19: 示例4-19 using System.Collections.Generic; // List namespace PersonBinding { // XAML doesn't (yet) ha... 阅读全文
posted @ 2008-04-04 12:36 包建强 阅读(1535) 评论(1) 推荐(0) 编辑
摘要:我们手动编写代码保证UI和数据同步。有效将两组属性隐式的绑定在一起,一组来自Person对象,另一组来自显示Person对象的控件。数据绑定用于显式的将属性从一个对象绑定到另一个,保持它们的同步,并转换为适当的类型,正如图4-7所示。 图4-7 4.2.1 绑定 取代以在代码中手动设置TextBox对象的Text属性并保证它们是最新的,数据绑定允许我们使用Binding对象的实例来设置Tex... 阅读全文
posted @ 2008-04-04 12:24 包建强 阅读(1345) 评论(4) 推荐(0) 编辑
摘要:考虑一个非常简单的应用程序:遍及一个人的名字和年龄,正如图4-1所示: 图4-1 图4-1可以实现为一个简单的xaml如示例4-1。 示例4-1 Name: Age: Birthday 在这个简单应用程序中显示的数据,可以被一个简单的类表现,如示例4-2所示。 示例4-2 public class Person {... 阅读全文
posted @ 2008-04-04 12:15 包建强 阅读(1066) 评论(1) 推荐(0) 编辑
摘要:任何应用程序都存在允许用户操作的数据,无论其来自对象,还是不同等级的或相关的资源。不管数据来自何处或者无论以什么格式,你可以对这些数据做很多事情,包括显示,转换,排序,过滤,关联,时常还会编辑它们。如果没有一种数据绑定的引擎,你将要手动地在UI和数据之间进行大批量的往返转换。适当的使用数据绑定,你只需要少量优雅的代码就可以获取更多的绑定样式——这样做通常是值得的。 阅读全文
posted @ 2008-04-04 11:54 包建强 阅读(689) 评论(2) 推荐(0) 编辑
摘要:样式支持你定义一个策略来设置可视化元素的依赖属性。属性的设置可以被命名以及手动或者编程方式地通过名称应用,或者使用元素类型样式来自动应用。除了提供不变的依赖属性值之外,样式可以包含基于条件的属性值——基于依赖属性,数据属性或者事件。还有,如果设置属性并不足以获取到你寻求的外观,你可以替换一个非可视化的控件,使用控件模板生成全部的控件行为。 但这并不是样式的全部。要了解动画是如何工作的,你可以阅读第... 阅读全文
posted @ 2008-04-04 11:53 包建强 阅读(553) 评论(2) 推荐(0) 编辑
摘要:如果仔细的看我们当前的TTT游戏,会发现Button对象并没有完全为我们工作。哪些TTT面板有内圆角? 图5-14 这里,我们真正需要的是能够保持按钮的行为,如支持内容和点击事件,但是我们想要接管这些按钮的外观。WPF允许这种方式,因为内在的控件创建的时候是缺少外观性的,例如,他们提供行为,但是外观可以被完全包装在客户端控件的外面。 还记得我们是如何使用数据模板,来为非可视化对象提供外观的么... 阅读全文
posted @ 2008-04-04 11:52 包建强 阅读(1005) 评论(2) 推荐(0) 编辑
摘要:目前为止,我们已经看到样式,作为一个Setter元素的集合。当应用一个样式时,在Setter元素中描述的设置不会无条件地应用(除非复写每一个设置的实例)。另一方面,触发器是一种在条件中包装了一个或更多Setter元素的方式,如果条件为真,相应地Setter元素会被执行,而条件为false的时候,属性值返回预先触发的值。 WPF伴随着3种你可以在一个触发器条件中检查的事情一起发生,依赖属性,.NET... 阅读全文
posted @ 2008-04-04 11:47 包建强 阅读(1628) 评论(3) 推荐(0) 编辑
摘要:让我们想象一下我们想要实现TTT更有娱乐性的一个版本(这是大部分游戏中最重要的特色)。例如,TTT的一种变体允许玩家每次只能占据3个格子,去除第一步在下第四步的时候,去除第二步在下第五步的时候,,以此类推。为了实现这个变体,我们需要保持对每一步按顺序跟踪——可以利用PlayMover类,如示例5-20。 示例5-20 namespace TicTacToe { public class P... 阅读全文
posted @ 2008-04-04 11:40 包建强 阅读(1155) 评论(5) 推荐(0) 编辑
摘要:命名样式非常有用,当你得到一组属性并应用到特点的元素上。然而,如果你想要应用一个统一的样式到所有确定元素类型的实例,设置TargetType而不用一个Key,如示例5-16所示。 示例5-16 在示例5-16所示,我们已经得到了两种样式,一种是带有TargetType的Button,没有key;另一种是带有TargetType的TextBlock,没有key。它们都以同样... 阅读全文
posted @ 2008-04-04 11:37 包建强 阅读(767) 评论(2) 推荐(1) 编辑
摘要:通过把同样的内嵌样式提升到资源中(正如第一章介绍的),我们可以给它一个名字,以及按名字使用它在我们的Button实例上,正如示例5-5。 示例5-5 在示例5-5中,我们在属性中使用到Control前缀取代Button前缀,从而允许样式更广泛的应用,正如我们将要看到的。 5.3.1 TargetType属性 方便起见,如果所有的属性可以在一个共享... 阅读全文
posted @ 2008-04-04 11:35 包建强 阅读(847) 评论(1) 推荐(0) 编辑
摘要:每一个“可样式化”的WPF元素都有一个Style属性,可以在内部设置这个属性——使用XAML属性-元素的语法(在第一章讨论的),如示例5-4。 示例5-4 因为我们想捆绑属性值在我们的样式中,我们有一个带有两个Setter子元素的Style元素,一个是我们想要设置的每个属性,如FontSize和FontWeight,都带有Button前缀,指出了包含属性的类。适用... 阅读全文
posted @ 2008-04-04 11:24 包建强 阅读(763) 评论(2) 推荐(0) 编辑
摘要:作为一个样式如何使其在WPF使用的例子,,让我们看一下TTT简单的实现,如示例5-1。 示例5-1 这个grid的外观上排列了一组9个按钮在一个3X3... 阅读全文
posted @ 2008-04-04 11:24 包建强 阅读(806) 评论(2) 推荐(0) 编辑
摘要:总而言之,对文档的处理,“样式”是应用到某个范围内容的一组属性,如文本、图像等等。举例来说,我们正在使用的样式名为“Normail,Body,b”,并用于预出版的文档,这意味着使用10号Times字体,完全对齐。文档的稍后部分,我们将要使用名为“Code,x,s”的样式,这将使用9号Courier New字体,居左对齐。当内容生成内容的时候,样式就应用到内容,产生确定的外观。 在WPF中,样式同样... 阅读全文
posted @ 2008-04-04 11:13 包建强 阅读(556) 评论(2) 推荐(0) 编辑
摘要:WPF提供了资源工具,让我们运用在用户界面中,动态并具有一致性。我们可以在资源字典中存储任意资源,并且可以遍及应用程序引用这些资源。WPF的样式机制依赖于资源字典——通过为控件设置属性和模板,基于应用程序的皮肤或当前的系统配置主题。而且,对于二进制资源,包含了编译后的BAML版本的xaml文件,WPF使用明显的本地化ResourceManager体系,为终端用户选取最适合的资源作为用户界面的文化。... 阅读全文
posted @ 2008-04-04 11:12 包建强 阅读(501) 评论(1) 推荐(0) 编辑
摘要:如果你打算发布你的应用程序到全球各地,你可能需要为不同地区的用户界面准备不同的版本。至少,这需要解决将文本翻译成适当的语言;同样需要解决UI改变的问题。你可能需要特定的外观适应为本地化的文化习俗。或者,你可能会发现原始的外观在翻译后并不能正常工作,因为词的长度是不一样的。(虽然WPF的外观体系避免了这一问题,更易于创建更弹性的外观。) 为你的软件在不同的市场创建不同的版本是可能的。尽管如此,更加普... 阅读全文
posted @ 2008-04-04 11:12 包建强 阅读(883) 评论(1) 推荐(0) 编辑
摘要:尽管ResourceDictionary和系统级别的资源适合于作为数据存在于对象中,然而,并不是所有的资源都能很好的满足这个模型。能够处理二进制流通常是很有用的。例如,图像,声频和视频,都是有效地二进制的代表,但是这些资源在xaml内都没有相应的标签,而且毕竟这些对象通常表现为底层数据的包装。标记语言本身代表了一种挑战:xaml页面必须编译到我们的应用程序中。因此,需要一种处理二进制流的方法。 W... 阅读全文
posted @ 2008-04-04 11:08 包建强 阅读(1152) 评论(1) 推荐(0) 编辑
摘要:WPF的样式机制以来于资源体系来定位样式。正如你在第5章看到的,样式在元素的资源片段中定义,而且样式通过其名字被引用,正如示例6-18所示: 示例6-18 Hello 然而,如何定义一个样式,使之自动的应用到一个元素,而无需显示指定要引用的资源——这是可以实现的,而且非常有用——当你需要把一个样式应用到具有独特类型的... 阅读全文
posted @ 2008-04-04 11:04 包建强 阅读(827) 评论(1) 推荐(1) 编辑
摘要:资源这个词具有非常广泛的意义。任何对象都可以是一个资源。一个在用户界面中经常使用的Brush或者Color可以是一个资源。一段文本或者一个图形也可以是一个资源。没有什么特殊的对象不可以成为一个资源。资源的底层处理机制确保了获取你所需要的资源成为可能,而不闭关心这个资源是什么;同时,这套机制可以简单的识别和定位对象。 资源管理的核心是ResourceDictionary这个类。这是一个相当简单的集合... 阅读全文
posted @ 2008-04-04 10:57 包建强 阅读(1324) 评论(1) 推荐(0) 编辑
摘要:WPF为我们架构一个应用程序的用户界面提供了相当大的弹性。但是,功能越强大,需要注意的就越多。我们必须避免使用户迷失在不协调而且过分装饰的前端。一个应用程序的用户界面应该是内在协调的,而且,应用程序之间不光区别在视觉化上,更多的是,对于用户所选择的操作系统的视觉主题,在感观上都是一致的。 在上章,我们已经看到样式和模板是如何允许我们控制应用程序的外观。这些都是基于WPF的资源(Resource)... 阅读全文
posted @ 2008-04-04 10:39 包建强 阅读(492) 评论(1) 推荐(0) 编辑
摘要:虽然详细地讨论视频和3-D超越了这本书的范围,但是获得这些特征的支持是值得的。 视频由MediaElement类型支持。这个元素可以被添加到UI树的任何地方。简单的设置它的Source属性以关联到它要播放的视频流,如示例7-49所示。 示例7-49 3-D内容通过Viewport3D支持。直到WPF的外观系统被关联,Viewport3D只是一个正规的控件,同时它可以被设定大小和定位,像其它控件... 阅读全文
posted @ 2008-04-04 01:26 包建强 阅读(652) 评论(1) 推荐(0) 编辑
摘要:形状元素能提供一种便利的方式与图形一起工作,在一些情形中,添加表示绘图的元素到UI树中,可能是比它的价值更加麻烦。你的数据可能被构造以一种易于编写代码的方式——简单地表现一系列基于数据的绘图操作,而不是构造一棵对象树。 WPF提供一个“可视化层”API,作为一个对形状元素较低级别的折中。(实际上,形状元素全都在可视化层得顶部被实现。)这个API使我们编写按需生成的代码。 可视化是一个可见的对象。W... 阅读全文
posted @ 2008-04-04 01:24 包建强 阅读(1275) 评论(2) 推荐(1) 编辑
摘要:支持高分辨率显示是WPF中的重要样式。这是被部分地支持——强调了可伸缩的向量图,而不是图像。但是,正如使用GDI+和GDI32显示的,如果可伸缩性没有完全集成到图像化构架中,独立的分辨率实际上是非常难于达到连续性的。 WPF对伸缩的支持是建立在一个基础的级别。任何用户界面中的元素都可以应用一个转换,使得伸缩和旋转任何事物都很容易。 所有的用户界面元素都有一个transform类型的RenderTr... 阅读全文
posted @ 2008-04-04 01:21 包建强 阅读(656) 评论(1) 推荐(0) 编辑
摘要:为了在屏幕上绘制一个图形,WPF需要知道你想要为图形填充什么颜色以及如何绘制它的边框。WPF提供了一些Brush类型支持各种绘图样式。Pen类增加这些笔刷以提供边框的厚度和样子。 在这一章,我们将要看一下各种类型的笔刷和钢笔类。可是,由于所有的笔刷和钢笔类最终是关于指出在哪里使用哪一种颜色,以及如何将它们联合在一起,我们必须首先看一下眼色是如何被表示的。 7.3.1 颜色 WPF在System.W... 阅读全文
posted @ 2008-04-04 01:18 包建强 阅读(1432) 评论(1) 推荐(0) 编辑
摘要:图形时绘图的基础,代表用户界面树的元素。WPF支持多种不同的形状,并为它们每一个都提供了元素类型。 7.2.1基本图形类 在这一节列出的所有元素,派生于一个共同的抽象基类Shape。虽然你不能直接使用这个类,知道它还是有帮助的,因为它定义了一组共同的特性——你可以在任何形状上使用。这些共同的属性都被连接到形状的内部和外部被绘制的地方。 Fill属性详细指出了Brush要用于填充内部。Line和Po... 阅读全文
posted @ 2008-04-04 00:53 包建强 阅读(1532) 评论(3) 推荐(0) 编辑
摘要:WPF使得在你的应用程序中使用图形很容易,以及更容易开发你的显卡的能力。这有很多图形构架的方面来达到这个目标。其中最重要的是综合。 7.1.1综合 图形化元素可以组合到你的用户界面的任何一部分中。很多GUI技术易于将图形分离到一个独立的世界。这就需要一个“操纵杆”——当移动一个世界的按钮、文本框和其它框架到另一个世界的Shape和图像中,由于在很多系统中,这两个世界有不同的编程模型。 例如,Win... 阅读全文
posted @ 2008-04-04 00:30 包建强 阅读(1677) 评论(1) 推荐(0) 编辑
摘要:WPF极易创建可视化的极好的应用程序。它提供了十分丰富的绘图能力,而且用来充分开发当今显卡的能力。这就支持设计者创建复杂的设计和使用动画,使UI比以往更加容易苏醒。 WPF的图形架构不仅适用于开发者。WPF中图形支持的主要方面是它的深层次综合其余的编程模型。它易于添加图形化元素到应用程序的一部分中,而不用困惑于编程技术的改变——需要很多用户界面技术。 由于WPF是一种表现技术,图形是一种重要的和实... 阅读全文
posted @ 2008-04-03 23:54 包建强 阅读(548) 评论(1) 推荐(0) 编辑
摘要:只有当任何内嵌控件都没有提供你需要的底层行为时,你将要写一个自定义控件。当你写一个自定义控件,你将要使用到依赖属性系统,来提供支持数据绑定和动画的属性。你将使用routed事件结构来暴露事件。如果你想写一个没有外观的控件,允许其可视化能被替换——如内嵌控件,你必须考虑你的控件和模板之间如何进行交互。你还将要为一个提供了一组默认可视化的模板提供一个默认值。 阅读全文
posted @ 2008-04-03 23:53 包建强 阅读(510) 评论(1) 推荐(0) 编辑
摘要:虽然为控件提供一个自定义外观的能力是有用的,开发者应该能够使用一个控件而不用必须提供自定义可视化。这个控件应该正好工作,当以它最直接的方式使用时。这意味着控件应该提供一组默认的值。 这些默认的可视化存储在组件的二进制资源中,使用的源文件为theme"generic.xaml。如果你在Visual Studio 2005中创建了一个WPF 控件库的工程,这将自动添加这个文件到你的工程中,并且设置它的... 阅读全文
posted @ 2008-04-03 23:52 包建强 阅读(665) 评论(1) 推荐(0) 编辑
摘要:对一个自定义元素最后的设计考虑是,它是如何连接其可视化的。如果一个元素直接从FrameworkElement中派生,这将会适当的生成它自己的可视化。(第7章描述了如何创建一个图形外观。)尤其是,如果你创建了一个元素,是为了提供一个特定的可视化表现,该元素应该完全控制这个可视化是如何管理的,一旦你编写了一个控件,通常你不会将一个图形硬编码到里面。 记住,一个控件的工作是提供行为。可视化是由控件模板提... 阅读全文
posted @ 2008-04-03 23:51 包建强 阅读(737) 评论(1) 推荐(0) 编辑
摘要:一旦你挑选好一个基类,你将要为你的控件设计一个API。大部分WPF元素提供属性暴露了多数功能,事件,命令,因为他们从框架中获取广泛的支持,以及易于使用XAML。WPF框架对routed event和命令提供了自动支持,它的依赖属性系统提供了数据半岛和动画支持。当然,你也可以写方法——对于某一种功能,方法是最好的途径。(例如,ListBox有一个ScrollIntoView方法,保证了一个特定的项目... 阅读全文
posted @ 2008-04-03 23:47 包建强 阅读(816) 评论(1) 推荐(0) 编辑
摘要:WPF提供了很多类,当创建一个自定义元素时,你可以从这些类中派生。图9-1显示了一组可能作为类——可能是合适的基类,并且说明了他们之间的继承关系。注意到,这决不是完整的继承关系图,只是简单的显示了一些你应该考虑的可能的基类。 无论你选择了哪一个基类,你的元素都会直接或间接地从FrameworkElement派生。这将提供routing事件,高级属性处理,动画,数据绑定,外观上的支持,样式,以及逻辑... 阅读全文
posted @ 2008-04-03 23:36 包建强 阅读(672) 评论(1) 推荐(0) 编辑
摘要:在写一个自定义控件之前,你需要问的第一个问题是,我真的需要一个自定义控件吗?一个写自定义控件的主要原因是为了用户界面技术专家可以修改控件的外观,但是正如我们在前些章看到的,内容模型和模板意味着这通常是不必要的。WPF提供了一个先进的按照规模的定制技术,你应该记住这些——当考虑写一个自定义控件时。 使用属性修改一个已有控件的外观 组合已有的一些控件 将内容嵌入已有控件 ... 阅读全文
posted @ 2008-04-03 23:32 包建强 阅读(928) 评论(1) 推荐(1) 编辑
摘要:WPF的一个优势在于,不必像其他用户界面框架那样要经常写自定义控件。如果你需要自定义一个已有控件的外观或者调整其表面的交互式行为,WPF提供各种各样的工具让你可以做到这些。在前面一些章节,我们已经看到了一些特色,如兼容性,内容模型,样式,模板,动画,以及集成的图像支持。这些可以让你广阔地定义已有控件而不用编写一个新的控件类型。 当然,自定义控件仍然占有地位。正如我们在第3章看到的,控件的角色是定义... 阅读全文
posted @ 2008-04-03 23:32 包建强 阅读(446) 评论(1) 推荐(0) 编辑
摘要:动画可以增强应用程序的交互感。它有利于更平滑的转换——当条目出现或消失的时候。它应该,当然,被用于体验和重新着色。如果你为应用程序中的每一个事物都设置了动画,这将是令人迷惑的一团乱麻。你还应该当心不要困惑你的用户——强迫他们等待动画的完成才可以进行处理。幸运的是,WPF使得关闭动画是简单的。所有的用户界面元素保持着活动状态——当动画还在进行的时候。 动画中的关键概念是timeline。Timeli... 阅读全文
posted @ 2008-04-03 23:29 包建强 阅读(547) 评论(1) 推荐(0) 编辑
摘要:所有在这章使用xaml举例说明的技术,都可以在代码中使用,正如你希望的。可是,代码可以使用动画在某种程度上不可能在xaml中实现的。 在代码中创建动画需要稍微多一点的努力——比使用标记。然而,代码提供了更多的弹性。你可以在运行期计算属性,而不是在xaml中硬编码,从而支持你的动画适应环境。例如,这可能是有用的——在当前窗体的大小基于动画的参数。 使用代码一个额外的好处是我们不需要使用storybo... 阅读全文
posted @ 2008-04-03 23:28 包建强 阅读(591) 评论(1) 推荐(0) 编辑
摘要:到目前为止,我们只看到简单的点到点的动画。我们使用了To和From属性或者By属性来设计动画——相对于当前的属性值。这很适合简单的动画,但是我们可以构造序列来创建更复杂的动画,这可能是非常麻烦的。幸运的是,这是没有必要的。WPF提供了动画对象,允许我们详细指出一系列时间和值。 在影视中传统的动画中,这是普通的开始——通过绘制最重要的动画步骤。这些关键帧定义了场景的基本流程,捕获了它的最重要的点。只... 阅读全文
posted @ 2008-04-03 23:26 包建强 阅读(1472) 评论(1) 推荐(0) 编辑
摘要:Storyboard是动画的集合。如果你使用了标记,所有的动画必须要被定义在一个Storyboard中。(在代码中创建隔离的动画对象,这是可能的,参见本章后面部分。)一个动画的结构通常是不同于设置了动画的UI的结构上。例如,你可能想要来两个单独的用户界面元素在同一时间被设置动画。因为Storyboard将动画从有动画效果的对象中隔离出来,Storyboard是自由地反射这样的连接,即使这些元素被设... 阅读全文
posted @ 2008-04-03 23:19 包建强 阅读(1499) 评论(1) 推荐(0) 编辑
摘要:Timeline代表了时间的延伸。它通常还描述了一个或多个在这段时间所发生的事情。例如,在前面章节描述的动画类型,都是Timeline。可哦率这样的DoubleAnimation: 正如Duration属性指出的,这代表了一个5秒的时间长度。所有类型的Timeline总是有一个开始时间和一个持续时间。如果没有详细指定开始时间,它默认为0:0:0,但是它可以使用BeginTime属性设置。开始时间... 阅读全文
posted @ 2008-04-03 23:03 包建强 阅读(1017) 评论(1) 推荐(0) 编辑
摘要:动画包括在一段时间内改变用户界面的某些可见的特征,如它的大小、位置或颜色。你可以做到这一点,非常困难的通过创建一个timer并在每一个timer_tick句柄中修改用户界面的外观。当然,这是动画在Win32或Windows Forms中典型的做法。幸运的是,WPF照顾到这些低级别的细节。动画,就像WPF中的其他特征,简单的要求我们声明想要做的。系统会为我们照顾它的实现。 所有的WPF动画支持归结为... 阅读全文
posted @ 2008-04-03 22:39 包建强 阅读(899) 评论(1) 推荐(0) 编辑
摘要:想象带有一个完全静态外观的应用程序,对鼠标的点击或其他输入,将提供非可视化的反应。有时候这是困难的——通知应用程序是否在执行功能或已经被冻结了。我们依赖于可视化反馈来保证应用程序可以响应我们的输入。添加动作到到你的用户界面可以使之苏醒以及增强应用程序的交互式感觉。控件经常模仿物理性的行为。例如,按钮被点击的时候变得明显被挤入。然而,如果按钮转换的很突然——在它的正常和被挤入的状态之间,它看上去很做... 阅读全文
posted @ 2008-04-03 22:04 包建强 阅读(528) 评论(1) 推荐(0) 编辑