XML特殊字符和空格 換行 轉義符

由於XAML是一種XML,在裏面寫段文字都經常會遇到問題。

* 空格

關於XAML中是如何處理空格的,MSDN上給出了詳細的描述:http://msdn.microsoft.com/en-us/library/cc189036%28v=VS.95%29.aspx#whitespace

摘重要的簡單說一下:

  1. 空格、回車、製表符都被當做空格。
  2. 連續的空格會被合併爲一個空格。
  3. <tag>後緊鄰的空格會被忽略。</tag>前緊鄰的空格會被忽略。換句話說,解析器對<tag>…</tag>中間的字符串做Trim。

如何保留空格

  1. 給元素加上屬性 xml:space="preserve"
    設置了這個屬性之後,會保留元素中所有的空格,不會合並連續空格,也不會trim兩頭的空格。
    這個方法有個不便,就是它會保留元素中所有的空格,哪怕這些空格是由代碼格式規整化後產生的。這就意味着,你不能用ctrl+E,F這樣的快捷鍵來整理代碼格式了,一旦不小心整理了,改回來都很麻煩。
  2. &#160;
    因爲XAML支持直接寫Unicode代碼,這串代碼代表一個non breaking space.

複雜的文本

帶有複雜格式的文本,建議使用RichTextBox。

因爲文本元素分爲block和inline兩種,TextBlock僅允許包含inline,所以用來展示少量的文本比較合適。

如果格式比較複雜,注意用好span,span與run的不同在於,span不會繼承父元素的格式,相當於重置格式,不受父元素格式的影響。

 

* 換行

在XAML中輸入回車會被當做一個空格,所有換行要用<LineBreak/>。

另外,兩個Run相鄰,如果是如下排列:

<Run>ab</Run>

<Run>cd</Run>

則顯示成:

ab

cd

會自動在兩個Run之間加上換行符。

如果要讓回車去掉,顯示成abcd,則應該寫在一行裏:

<Run>ab</Run><Run>cd</Run>

 

* Tab

首先,XAML中沒有tab,只能用連續的空格來代替。

需要注意,在將一個string賦值給RichTextBox的Xaml屬性時,會合並掉連續的空格,所有如果要保留tab(連續的空格),需要進行這樣一個workaround:

private const string TAB = "    ";
private const string TAB_PLACEHOLDER = "===TAB===";

textBox1.Text = richTextBox1.Xaml;
string xaml = richTextBox1.Xaml;

xaml = xaml.Replace(TAB, TAB_PLACEHOLDER);

richTextBox2.Xaml = xaml;

foreach (Block block in richTextBox2.Blocks)
{
    foreach (Inline inline in ((Paragraph)block).Inlines)
    {
        ((Run)inline).Text = ((Run)inline).Text.Replace(TAB_PLACEHOLDER, TAB);
    }
}

先用一個佔位符來代替四個空格,這樣在給richTextBox的xaml屬性賦值的時候就不會合並空格了。

然後再替換這個佔位符,賦完值替換的時候不會進行合併。

==================================================

XAML被XML規則綁定。例如XML對幾個特殊字符有特別意義,像&,<,>。如果你嘗試用這些值來設置一個元素的內容,你可能會出錯,因爲XAML解析器假設你正在試圖做某些事情,比如創建嵌套元素。你可以使用字符實體,例如<用&lt;,>用&gt;,&用&amp;,"用&quot; 特殊字符不是你運行XAML的一障礙,另外一個是空格處理。一個字符串前,後,字符串中的空格,TAB,回車鍵都會被忽視掉,只保留一個空格。你可以使用XML:space="preserve",保留任何空格,TAB,回車鍵。注意,這些規則只對XAML有用,如果你在代碼中設置內容,任何空格都會保留。


特殊字符和空格

下面的字符在 [XML]中被定義爲 空白(whitespace)字符: 

空格 (&#x0020;) 
Tab (&#x0009;) 
回車 (&#x000D;) 

換行 (&#x000A;)


【轉】http://blog.csdn.net/hustypf/article/details/7690102

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章