Silverlight中XAML中空白处理

空白处理


为了与 XML 保持一致,XAML 中的空白字符包括空格、换行符和制表符。它们分别对应于 Unicode 值 0020、000A 和 0009。

默认情况下,当 XAML 处理器处理 XAML 文件中元素间的任意内部文本时,将发生下列空白规范化:

  • 移除东亚字符之间的换行符。有关“东亚字符”的定义,请参见本主题后面的“东亚字符”一节。

  • 将所有空白字符(空格、换行符和制表符)转换为空格。

  • 删除所有连续的空格,将其替换为一个空格。

  • 删除紧跟在开始标记后面的一个空格。

  • 删除紧靠在结束标记前面的一个空格。

“Default”对应于 xml:space 属性的默认值所表示的状态。

内部文本中的空白和字符串基元

上面的规范化规则适用于 XAML 元素中的内部文本。进行规范化后,XAML 处理器将所有内部文本转换为相应的类型,如下所示:

  • 如果属性的类型不是一个集合,而是一个间接的 Object 类型,XAML 处理器将尝试使用其类型转换器转换为该类型。如果这里的转换失败,将导致编译时错误。

  • 如果属性的类型是一个集合,而且内部文本是连续的(没有介入的元素标记),则将内部文本分析为一个 String。如果集合类型不能接受 String,则也会导致编译时错误。

  • 如果属性的类型是 Object,则将内部文本分析为一个 String。如果有介入的元素标记,则会导致编译时错误,因为 Object 类型表示单个对象(String 等)。

  • 如果属性的类型是一个集合,而内部文本并不连续,则将第一个子字符串转换为一个 String 并添加为一个集合项,再将介入元素添加为一个集合项,最后将尾随子字符串(如果有)作为第三个 String 项添加到集合中。

空白和文本内容模型

在实际应用中,保留空白只涉及到所有可能的内容模型的一个子集。该子集由一些内容模型组成,这些内容模型可以使用某种形式的单个 String 类型、专用的 String 集合,或者混合使用 String 与列表、集合或字典中的其他类型。

这些内容模型内的默认行为是不将保留的任何空白视为有意义,即使对于可以使用字符串的内容模型而言,也是如此。

有关通常将空白作为有意义字符处理的控件或其他类型的更多信息,请参见文本和字体RichTextBox 概述

保留空白

有几种方法可用于保留源 XAML 中的空白以实现最终表示形式,这些方法不受 XAML 处理器空白规范化的影响。

xml:space="preserve":在需要保留空白的元素级指定此特性。请注意,这样将保留所有空白,包括代码编辑应用程序为了以视觉上直观的嵌套形式对齐标记元素而添加的空格,但是否呈现这些空白仍然是包含元素的内容模型的问题。不建议在根级别指定 xml:space="preserve",因为大多数对象模型不会以任何方式将空白视为有意义。更好的做法是:专门在可呈现字符串中空白的元素级别或者在空白有意义的集合的元素级别设置该属性。

实体和不间断空格:XAML 支持在文本对象模型中放置任何 Unicode 实体。您可以使用专用的实体,如不间断空格(在 UTF-8 编码中为  )。还可以使用支持不间断空格字符的多格式文本控件。使用实体模拟布局特征(如缩进)时应谨慎,因为实体的运行时输出会由于许多因素而不同,而影响实体输出的因素(如正确使用面板和边距)要多于一般的布局工具。

东亚字符

“东亚字符”是指一组 Unicode 字符,范围从 U+20000 到 U+2FFFD 以及 U+30000 到 U+3FFFD。这个子集有时也称为“CJK 表意文字”。有关更多信息,请参见 http://www.unicode.org。

posted @ 2010-09-27 09:00  Jake.Xu  阅读(761)  评论(0编辑  收藏  举报