[WPF] XAML 中輸入特殊字元/跳脫序列(Escape Sequence)

如何在 XAML(XML/HTML) 內輸入特殊字元符號的心得筆記

在設計 WPF 專案時,當字串內包含特殊符號在 code-behind 是沒什麼問題,但問題是想要在 XAML 下處理就不太一樣了

比如要將字串斷行,在 C# 程式碼上只要填入 "\n" "\r" "\r\n" 都可以達到效果(各語言/系統平台上還是有些差異)

但在 XAML 的 TextBlock 要寫如下才能斷行

<TextBlock FontSize="16"
 Foreground="#CCCCCC">
           <Run>Line1</Run>
           <LineBreak/>
           <Run>Line2</Run>
</TextBlock>

如果用如以下方式,那就跟預期的效果不一樣

<TextBlock FontSize="16"
           FontWeight="Normal"
           Foreground="#CCCCCC"
           Text="Line1
                 Line2">
</TextBlock>

那有辦法在 Text 屬性中完成整個字串的處理嗎?

有的!要用跳脫序列(Escape Sequence)或稱字元實體(Character Entity),如下 &#10; 這一串就是跳脫序列

<TextBlock FontSize="16"
           FontWeight="Normal"
           Foreground="#CCCCCC"
           Text="Line1
                 &#10;Line2">
</TextBlock>

XAML/XML/HTML 中具特別用途的字元(如: <, >, &, ", ')與特殊字元都無法直接使用,而想要顯示這些字元也是需要使用跳脫序列

跳脫序列由三個部分組成:1. 以 & 符號開始 2. 實體名稱或 #實體編號 3. 以 ; 符號結束 

比如 < 的跳脫序列為:&lt; / &#60; / &#060; / &#x3C; / &#x003C; 都可以達到相同效果

再舉個例子用希臘字母 Sigma 的有效字元值參照如下

可以發現 &#(實體編號); 的實體編號是字元 ASCII 十進位編號;&#x(實體編號); 的實體編號是字元 ASCII 十六進位編號!

請參照維基百科的 ASCII控制字元的編號

在 XAML 上我試過可用的實體名稱只有雙引號(&quot;),&符號(&amp;),小於符號(&lt;),大於符號(&gt;)這四個,若有其他可用的實體名稱也請大大們告知,感恩~m(_ _)m

以下列出常用的跳脫序列

顯示說明實體名稱十進制編號十六進制編號
"雙引號&quot;&#34;&#x22;
&&符號&amp;&#38;&#x26;
<小於符號&lt;&#60;&#x3C;
>大於符號&gt;&#62;&#x3E;
 不間斷空格(non-breaking space) &#160;&#xA0;
'單引號 &#39;&#x27;
 跳位(Tab, \t) &#09;&#x09;
 換行(Line Feed, \n) &#10;&#x0A;
 回車(Carriage Return, \r) &#13;&#x0D;
 空白(Space) &#32;&#x20;
+加號 &#43;&#x2B;
-減號 &#45;&#x2D;
×乘號 &#215;&#xD7;
÷除號 &#247;&#xF7;
=等於符號 &#60;&#x3D;
不等於符號 &#8800;&#x2260;
±正負號 &#177;&#xB1;
Α希臘字母Alpha(大寫) &#913;&#391;
Β希臘字母Beta(大寫) &#914;&#392;
Γ希臘字母Gamma(大寫) &#915;&#393;
Δ希臘字母Delta(大寫) &#916;&#394;
Ε希臘字母Epsilon(大寫) &#917;&#395;
Ζ希臘字母Zeta(大寫) &#918;&#396;
Η希臘字母Eta(大寫) &#919;&#397;
Θ希臘字母Theta(大寫) &#920;&#398;
Ι希臘字母Iota(大寫) &#921;&#399;
Κ希臘字母Kappa(大寫) &#922;&#39A;
Λ希臘字母Lambda(大寫) &#923;&#39B;
Μ希臘字母Mu(大寫) &#924;&#39C;
Ν希臘字母Nu(大寫) &#925;&#39D;
Ξ希臘字母Xi(大寫) &#926;&#39E;
Ο希臘字母Omicron(大寫) &#927;&#39F;
Π希臘字母Pi(大寫) &#928;&#3A0;
Ρ希臘字母Rho(大寫) &#929;&#3A1;
Σ希臘字母Sigma(大寫) &#931;&#3A3;
Τ希臘字母Tau(大寫) &#932;&#3A4;
Υ希臘字母Upsilon(大寫) &#933;&#3A5;
Φ希臘字母Phi(大寫) &#934;&#3A6;
Χ希臘字母Chi(大寫) &#935;&#3A7;
Ψ希臘字母Psi(大寫) &#936;&#3A8;
Ω希臘字母Omega(大寫) &#937;&#3A9;
α希臘字母Alpha(小寫) &#945;&#3B1;
β希臘字母Beta(小寫) &#946;&#3B2;
γ希臘字母Gamma(小寫) &#947;&#3B3;
δ希臘字母Delta(小寫) &#948;&#3B4;
ε希臘字母Epsilon(小寫) &#949;&#3B5;
ζ希臘字母Zeta(小寫) &#950;&#3B6;
η希臘字母Eta(小寫) &#951;&#3B7;
θ希臘字母Theta(小寫) &#952;&#3B8;
ι希臘字母Iota(小寫) &#953;&#3B9;
κ希臘字母Kappa(小寫) &#954;&#3BA;
λ希臘字母Lambda(小寫) &#955;&#3BB;
μ希臘字母Mu(小寫) &#956;&#3BC;
ν希臘字母Nu(小寫) &#957;&#3BD;
ξ希臘字母Xi(小寫) &#958;&#3BE;
ο希臘字母Omicron(小寫) &#959;&#3BF;
π希臘字母Pi(小寫) &#960;&#3C0;
ρ希臘字母Rho(小寫) &#961;&#3C1;
σ希臘字母Sigma(小寫) &#963;&#3C3;
τ希臘字母Tau(小寫) &#964;&#3C4;
υ希臘字母Upsilon(小寫) &#965;&#3C5;
φ希臘字母Phi(小寫) &#966;&#3C6;
χ希臘字母Chi(小寫) &#967;&#3C7;
ψ希臘字母Psi(小寫) &#968;&#3C8;
ω希臘字母Omega(小寫) &#969;&#3C9;
©版權符號 &#169;&#xA9;
®已註冊商標 &#174;&#xAE;
商標(美國) &#8482;&#x2122;

補充一點,在字串中間加入數個空格在 XAML 是可以正常顯示,但如果加在字串開頭或是字串結尾則只保留一個

因此當在字串開頭或結尾加入空格來調整顯示樣式就必須要用 &#x20; 來替換空白才能正確顯示!