在本书的最终印刷版中出现了不少问题,对此我感到十分遗憾,在此向各位读者表示深深的歉意!
以下是勘误表的正文:
2.6 P17
译文:摆脱花括号(一段)
若不这样做,你也可以使用属性元素语法而不用任何摆脱,……
修订:
妙用花括号
……若不打算这么做,你也可以使用属性元素语法,而无需任何技巧,……
2.7.2 P19
译文:XAML允许将项添加到支持索引的两种类型的集合中:List和Dictionary
修订:XAML能把项添加到两种支持索引的集合中,它们是List和Dictionary。
P20
译文:例如,下面的XAML添加了两个Color对象到一个ResourceDictionary中。
修订:例如,下面的XAML在ResourceDictionary中添加了两个Color对象。
2.9.2 P30
译文(最后一句):XML的性能缺陷通常只会影响开发时,而此时又是最需要XML的好处的
修订:XML的性能缺陷通常只会影响开发过程中的性能,而此时又是最需要使用XML的时候。
3.1 P31
译文:这是由于它具有层次化的特性
修订:这是因为它有层次化特性
译文:在WPF中,用户界面由一个对象树构建而成
修订:在WPF中,用户界面由一棵对象树构建而成
译文:通过学习每一个概念时
修订:在学习每一个概念时
译文:Window拥有一个StackPanel子元素
修订:这个Window拥有一个StackPanel子元素
3.2 P35
译文:当使用depth=0和当前的Window实例调用这些方法时,其结果就是一个基于文本的树
修订:当depth=0且当前的Window实例调用这些方法时,其结果就是用文本“画”出一棵树。
译文:虽然在Window的构造函数中就可以遍历逻辑树,但可视树直到Window完成至少一次布局之后才会有节点,否则是空的。
修订:虽然在Window的构造函数中就可以遍历逻辑树,但直到Window完成至少一次布局之后可视树才会有节点,否则就是空的。
3.2 P36
原文:You might first meet this concept with skepticism, as it complicates the picture of .NET types having simple fields, properties, methods, and events.
译文:你可能在怀疑论中第一次遇到这个概念,它使得.NET类型变得很复杂
修订:你可能在第一次碰到这个概念时产生过怀疑,因为它可能使原本简单的.NET类型(其中包括字段、属性、方法和事件)变得很复杂。
译文:或者一个父元素的属性值从上慢慢传递给子元素等
修订:或者一个父元素的属性值从上而下慢慢传递给子元素等
3.3.2 P48
译文:Source和OriginalSource的存在允许使用更高级别的逻辑树和更低级别的可视树。
修订:由于Source和OriginalSource的存在,你可以使用更高层的逻辑树和更低层的可视树。
译文:(就像由键盘支持的Click)
修订:(比如由键盘触发的Click事件)
3.3.3 P49
译文:可以标记它为“已处理”
修订:你可以把它标记为“已处理”
译文:指示笔是一种类似于笔的平板电脑(TabletPC)使用的设备
修订:指示笔是一种类似于笔的设备,供平板电脑(TabletPC)使用
3.4.1 P57
译文:Button的Content也可以在XAML中设置,可以设置它为选中的命令的Text属性
修订:Button的Content也可以在XAML中设置,你可以设置它为某个命令的Text属性。
3.4.2 P57
译文:就像按Help Button一样!
修订:就像按Help按钮一样!
第3章小结 P60
译文:会看到这并没有曾经的技术那么简单
修订:会看到这并没有以前的技术那么简单
3.4.3 P58
译文:粘贴Button会自动被启用
修订:Paste按钮会自动被启用
3.5 P59
译文:Freezable类——出于性能原因,可以被“冻结”为一个只读状态对象的基类。
修订:Freezable类——被冻结的对象的基类,这些对象是只读的,使用这些对象主要是出于性能方面的考虑。
P60
译文:Controls也支持一些模板……
修订:Control类还支持一些模板……
3.6 P60
译文:在这一章和前面的两章中,已经学习了在.NET Framework之上构建WPF的主要方式
修订:在本章和前两章中,你已经学习了在.NET Framework的基础上构建WPF应用的主要方式。
译文:而是增加了一些基础概念来提供许多特性,
修订:而是增加了一些基础概念,它们能够提供许多功能,
译文:确实,当你聚焦这些核心概念时,
修订:确实,当你专注于这些核心概念时,
4.1.2 P66
译文:作为一种WPF的内容控件,它可以用Content属性存储任何内容——Button、Menu等,但是Label只对文本有用。
修订: 作为WPF的内容控件之一,它能用Content属性存储任何内容,如Button、Menu等,但Label通常仅用于文本。
P67
译文:(提示)甚至不需要使用ToolTip常见问题解答类
修订:甚至不需要使用ToolTip类
4.1.2.3 P69
译文:例如,当属性在Frame中时,它们将不从元素树继承。从很多方面看,WPF的Frame行为很像HTML的Frame。
修订:例如,从元素树继承下来的属性在到达Frame时将停止继承。WPF的Frame的行为在很多方面很像HTML中的Frame。
译文:谈到HTML,Frame的要求是它除了渲染WPF内容以外还要可以渲染HTML内容!
修订:谈到HTML,Frame的要求是它除了能渲染WPF内容以外还能渲染HTML内容!
译文:不幸的是,当Frame宿主了HTML之后,它有一些局限,……
修订:可惜,当Frame装载了HTML之后,他会有一些局限性,……
译文:例如,HTML内容总是在WPF内容顶部被渲染……
修订:例如,HTML内容总是在WPF内容的上方渲染……
4.2 P72
译文:WPF会渲染每一个项的DayOfWeek属性值
修订:WPF会渲染每一项(item)的DayOfWeek属性的值。
译文:这就是图4-10中3个DateTime对象被渲染为Monday、Tuesday和Wednesday的原因
修订:这就是图4-10中3个DateTime对象显示成Monday、Tuesday和Wednesday的原因
4.2 P78
译文:为什么我为在ComboBoxItem中包装(wrap)Item操心?
修订:为什么我尽量把Item包装(wrap)在ComboBoxItem中?
译文:整个控件在选择框里得到显示。作为替代,它的内部内容会被截取并显示出来。
修订:选择框中不会显示整个控件,而是把内部内容截断后显示出来。
4.2 P81
译文:也保存了一些控制列header的行为的其它属性。
修订:也保存了一些控制列头(column header)的行为其他属性。
4.2.2 P82
译文:把Menu添加到它的ItemsControl基类的唯一公开的API是IsMainMenu属性。
修订:Menu唯一添加到ItemsControl基类的公开API是IsMainMenu属性。
译文:当为true(默认值)时,用户按下Alt……
修订:当IsMainMenu为true(默认值)时,用户按下Alt……
P83
译文:MenuItem使用下划线前缀来支持访问键(access key)
修订:MenuItem使用下划线前缀来支持快捷键(access key)
P86
译文:TreeView的API使它看起来很像一个Selector
修订:看过TreeView的API,你会发现它很像一个Selector
4.3.1 P90
译文:因为它使用户能够通过在刻度尺移动手指光标来改变当前的值。
修订:因为它使用户能够通过移动刻度尺上的手指光标来改变当前的值。
4.4.3 P92
译文:一个普通的System.String的非加密内容会被存在垃圾回收站中并保存一段时间,
修订:一个普通的System.String的非加密内容会被存放在用于垃圾回收的堆(heap)上,并保存一段时间。
4.4.4 P93
译文:InkCanvas支持几种模式
修订:InkCanvas支持多种模式
6.5.2 P120
译文:另一个迷人的Grid特性是,它对交互改变行列尺寸的支持
修订:Grid另一个迷人的特性是,它支持以交互方式改变行列尺寸
译文:也可以添加多个GridSplitter到Grid中
修订:你也可以添加多个GridSplitter到Grid中
译文:默认情况下,哪个单元格受到尺寸改变的影响取决于GridSplitter的对齐值。表6-5总结了这一行为,并用蓝色表示出了在不同的设置下GridSplitter的样子
修订:默认情况下,哪个单元格的尺寸会改变取决于GridSplitter的对齐值。表6-5总结了这一行为,并用蓝色标出了不同设置的GridSplitter的样子。
P121
译文:当所有的行或列采用比例尺寸的话
修订:当所有的行或列采用比例尺寸时
译文:作用是控制哪两行或哪两列,应该受到尺寸改变的影响
修订:作用是控制哪两行或哪两列应该改变尺寸
6.5.3 P122
译文:作为比较,图6-16展示了……
修订:为了让大家有个比较,图6-16展示了……
7.2.2
译文:使用Hyperlinks
修订:使用Hyperlink(超链接)
P158
译文:然而,在使用导航日志导航的情况下,你可以把JournalEntry.KeepAlive附加属性设置为true,这样可以强迫Page重用同一个实例。
排版错误,应该在“提示”内。
7.2.2.4 P159
译文:无论导航是否使用Navigate、Hyperlinks或导航日志……
修订:无论导航使用Navigate方法、Hyperlink元素还是导航日志……
7.2.3.2 P161
译文:能够通过前面讨论过的3种方法里面的前两种来完成这种需求
修订:你能通过前面提到的3种方法里的前两种来完成这一需求。
7.4 P168
译文:在WPF中创建非正方形窗口是非常容易的。
修订:在WPF中创建非矩形窗口是非常容易的。
8.1.2 P182
译文:(提示)这些也可以用两个斜杠或逗号,而不是3个
修订:这些也可以用2个斜杠或2个逗号,而不一定要3个。
8.2.2.1 P189
原文:Factoring XAML
译文:漏
修订:分解XAML
8.2.2.2 P190
译文:也可以调用TryFindResource
修订:你也可以调用TryFindResource
P191
译文:与下面的c#代码实现了相同的功能
修订:与下面的c#代码实现的功能是一样的:
8.2.3 P192
译文:WPF中适合使用DynamicResource最明显的地方是……
修订:WPF中最适合使用DynamicResource的地方是……
8.3 P193
译文:它是对你的软件做本地化的基础
修订:而是对软件进行本地化的基础。
译文:逻辑资源最有意思的(或许也是最重要的)的应用在于将它应用到一些像……
修订:逻辑资源最有意思(或许也是最重要)的应用在于将它应用到一些像
9.1.1 P194
译文:想象一下,需要向Photo Gallery应用程序
修订:想象一下,如果你要向Photo Gallery应用程序
9.1.4 P200
译文:尽管Label.Content是Object类型的,但TextBlock.Text是一个字符串。因此,当Label.Content被设置为一个字符串时,Label经历了一次类型转换,ToString方法被调用。
修订:尽管Label.Content是Object类型的,但TextBlock.Text是字符串类型的。因此,当Label被赋给一个字符串时,会经历了一次类型转换,同时调用了ToString方法。
9.1.5 P200
译文:很明显,默认的photos集合的显示方式——即用ToString呈现——并不能让人接受。
修订:很明显,photos集合默认的显示方式并不能让人接受,因为它是用ToString来呈现照片的。
9.3 P210
译文:多选择器会指向相同的源集合
修订:多个选择器(Selector)会指向相同的源集合
10.1 P237
译文:一个灵敏的读取器可能需要知道代码清单中Setter如何对InkCanvas产生影响
修订:精明的读者可能想知道代码清单中Setter如何对InkCanvas产生影响。
10.2 P244
译文:每个控件的源代码与它的默认可视树表示或可视源代码,visual source code完全隔离
修订:每个控件的源代码与它的默认可视树表示(或这说可视源代码,visual source code)完全隔离
10.2.1 P246
译文:(提示)在代码清单10-4中,在控件模板的可视树中,Button是被作为元素的模板化父类的。
修订:(提示)在代码清单10-4的控件模板的可视树中,Button是被作为元素的父模板元素(templated parent)的。
10.3 P265
译文:或者一个让控件失去外观的模板的皮肤呢?你其实有很多种方法来队一只猫上色!(双关语)
修订:又如何处理一个让控件失去外观的模板的皮肤呢?就好比你可以有很多种方法对一只猫染色一样!
10.4.2 P268
译文:(代码)[程序集:ThemeInfo(...)]
修订:[Assembly: ThemeInfo(...)]
11.1.2 P284
译文:它包含了一组用短划线的宽度以及之间的距离这样的模式表示的值
修订:它包含了一组值,这些值按照短划线的宽度、它们之间的距离这样的方式排列。
11.2 P286
译文:比如说透明和剪切
修订:比如说Opacity(透明)属性和Clip(剪切)属性
11.3.2 P299
译文:在发现了Rectangle的灵活性,并且意识到它可以被绘制成为看上去像椭圆(或者圆形)的样子之后,你可能会认为一个单独的Ellipse类是多余的。
修订:当你发现Rectangle十分灵活,灵活到能够把它绘制成看似椭圆(或者圆形)的形状时,你可能会觉得这样一个单独的Ellipse很多余。
11.3.4 P300
译文:图11-18绘制了下面的4个Polyline类型转换器可以使Point只用一组交互的x、y值来表示。……你可以在每一个之间放置逗号……
修订:图11-18绘制了下面的4个Polyline,类型转换器可以用一组交互的x、y值把这些Point对象表示出来。……你可以在每个值之间放上一个逗号。
译文:图11-19演示了对象不闭合的PatGeometry这样的几何体,设置了Polyline的Fill属性后的填充效果,这就好像……
修订:图11-19演示了通过Polyline的Fill属性产生的类似于不闭合的PathGeometry这样的几何形状,这就好像……
11.4 P303
译文:它的过滤回调函数在可视树的遍历过程中剪除了禁用的和不可见的UIElement,它的结果处理回调函数……
修订:在可视树的遍历过程中,它的过滤回调函数将剔除那些被禁用或者不可见的UIElement,而它的结果处理回调函数……
11.4.3 P315
原文:Opacity Mask (所有词都要替换)
译文:透明掩码
修订:透明遮罩(Opacity Mask )
P316
译文:你甚至可以将OpacityMake应用到顶层Window!
修订:你甚至可以将OpacityMask应用到顶层Window!
12.2.1 P326
译文:坐标系统的左右手指的是……
修订:坐标系统的左右手性质指的是……
12.2.2 P327
译文:(注意)图12-8展示了当将Camera移到离房子模型太近的地方时,会是发生什么。
修订:图12-8展示了将Camera移到离房子模型太近的地方时,会发生什么。
12.2.3 P330
译文:UpDirction/LookDirction
修订:UpDirection/LookDirection
12.4 P340
译文:Model3D是用来为场景构建为3D模型的基本部件
修订:Model3D是在场景中构建3D模型的基本部件。
13.1.2 P366
译文:即使泛型是完全支持的,这些类也有一些不适合泛型的方面
修订:即使完全支持泛型,这些类也有不适合使用泛型的地方。
13.1.3.5 P372
译文:(代码注释)在一行中执行动画两次
修订:用一行代码执行同一个动画两次
14.4.2 P412
译文:正如第4章中所提到的,一个FlowDocument可以在一个RichTextBox中查看(及编辑)
修订:正如第4章中所提到的,一个FlowDocument可以在RichTextBox中被查看(或编辑)
15.2 P434
译文:即使你不需要这些额外的“灿烂”,……
修订:即使你不需要这些锦上添花的东西,……
译文:我们使用一个叫做DocumentViwer的内建WPF控件
修订:我们将使用一个叫做DocumentViewer的内建WPF控件