關於XAML中是如何處理空格的,MSDN上給出了詳細的描述:http://msdn.microsoft.com/en-us/library/cc189036%28v=VS.95%29. aspx#whitespace
摘重要的簡單說一下:
空格、回車、製表符都被當作空格。
連續的空格會被合併為一個空格。
如何保留空格
給元素加上屬性xml:space="preserve"
設定了這個屬性之後,會保留元素中所有的空格,不會合併連續空格,也不會trim兩頭的空格。
這個方法有個不便,就是它會保留元素中所有的空格,哪怕這些空格是由程式碼格式規整化後產生的。這就意味著,你不能用ctrl+E,F這樣的快捷鍵來整理程式碼格式了,一旦不小心整理了,改回來都很麻煩。
因為XAML支援直接寫入Unicode程式碼,這串程式碼代表一個non breaking space.
複雜的文字
有複雜格式的文本,建議使用RichTextBox。
因為文字元素分為block和inline兩種,TextBlock只允許包含inline,所以用來展示少量的文字比較適合。
如果格式比較複雜,注意用好span,span與run的不同在於,span不會繼承父元素的格式,相當於重置格式,不受父元素格式的影響。
* 換行
在XAML輸入回車會被當作一個空格,所有換行要用
另外,兩個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解析器假設你正在試圖做某些事情,例如建立巢狀元素。你可以使用字元實體,例如<用<,>用>,&用&,"用" 特殊字元不是你運行XAML的一障礙,另外一個是空格處理。一個字串前,後,字串中的空格,TAB,回車鍵都會被忽略掉,只保留一個空格。你可以使用XML:space="preserve",保留任何空格,TAB,回車鍵。注意,這些規則只對XAML有用,如果你在程式碼中設定內容,任何空格都會保留。
特殊字元和空格
下面的字元在 [XML]中被定義為 空白(whitespace)字元:
空格 ( )
Tab ( )
Enter (
)
換行 ( )
以上是XML特殊字元與空格 換行 轉義符的程式碼詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!