2008-09-22 64 views
3

假設我有一些XAML這樣的:WPF和字符串格式化

<Window.Resources> 
    <v:MyClass x:Key="whatever" Text="foo\nbar" /> 
</Window.Resources> 

顯然,我想在MyClass.Text財產換行符,但XAML分析器構造帶文字字符串對象「FOO \ NBAR 」。

有沒有(a)一種說服解析器轉換轉義序列的方式,或者(b)一種.NET方法以C#編譯器的方式解釋字符串?

我意識到我可以在那裏尋找\n序列,但是使用通用方法來做到這一點會更好。

回答

12

您可以使用XML字符轉義

<TextBlock Text="Hello&#13;World!"/> 
+0

我認爲這幾個答覆會的工作,但是這肯定是最簡單的解決方案。謝謝大家。 – chrisd 2008-09-22 18:51:57

1

關閉我的頭頂,嘗試;

  1. 自定義綁定表達式可能嗎?

<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>

  • 使用一個字符串靜態資源?

  • 使文本成爲控件的默認屬性;

  • <v:MyClass x:Key="whatever"> 
    foo 
    bar 
    </v:MyClass> 
    
    1

    我知道我可以去那裏找\ n鏈,[...]

    如果所有你關心爲\ n的,那麼你可以嘗試類似的東西:

    string s = "foo\\nbar"; 
    s = s.Replace("\\n", "\n"); 
    

    或者,fo R B),因爲我不知道的,並不能找到一個內置函數來做到這一點,是這樣的:

    using System.Text.RegularExpressions; 
    
    // snip 
    string s = "foo\\nbar"; 
    Regex r = new Regex("\\\\[rnt\\\\]"); 
    s = r.Replace(s, ReplaceControlChars); ; 
    // /snip 
    
    string ReplaceControlChars(Match m) 
    { 
        switch (m.ToString()[1]) 
        { 
         case 'r': return "\r"; 
         case 'n': return "\n"; 
         case '\\': return "\\"; 
         case 't': return "\t"; 
         // some control character we don't know how to handle 
         default: return m.ToString(); 
        } 
    } 
    
    0

    我會使用默認的TextBlock控件這裏作爲參考。在控制你換行,像這樣:

    <TextBlock> 
         Line 1 
         <LineBreak /> 
         Line 2 
        </TextBlock> 
    

    你應該能夠做到與你的控制通過使您控制的含量值是文本屬性類似的東西。