假设我有一些像这样的XAML:

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

显然我想在MyClass.Text属性中使用换行符,但是XAML解析器使用文字字符串<!>“foo \ nbar <!>”构建对象。

是否有(a)说服解析器转换转义序列的方法,或者(b).NET方法以C#编译器的方式解释字符串?

我意识到我可以去那里寻找\n序列,但是有一个通用的方法可以做到这一点更好。

有帮助吗?

解决方案

您可以使用XML字符转义

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

其他提示

离开我的头顶,试试;

  1. 自定义绑定表达式?
  2.   

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

    1. 使用字符串静态资源?

    2. 将Text设为控件的默认属性;

    3. <v:MyClass x:Key="whatever">
      foo
      bar
      </v:MyClass>
      
  

我意识到我可以去那里寻找\ n序列,[...]

如果您关心的只是\ n,那么您可以尝试以下方式:

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

或者,对于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();
    }
}

我会在这里使用默认的TextBlock控件作为参考。在那个控件中你会像这样进行换行:

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

通过使控件的内容值成为文本属性,您应该可以对控件执行类似的操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top