WPF和字符串格式化(WPF and string formatting)

2019-09-19 16:41发布

假设我有一些XAML这样的:

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

很显然,我希望在MyClass.Text财产换行符,但XAML分析器构建与文本字符串“FOO \ NBAR”的对象。

有(一)解释在C#编译器会方式的字符串的方式来说服解析器翻译转义序列,或(b)的.NET方法?

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

Answer 1:

您可以使用XML字符转义

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


Answer 2:

关闭我的头顶,尝试;

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

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

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

  2. 使文本您控制的默认属性;

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


Answer 3:

我知道我可以去那里找\ 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();
    }
}


Answer 4:

我会用默认的TextBlock控件这里作为参考。 在控制你换行,像这样:

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

你应该能够做到与你的控制通过使您控制的含量值是文本属性类似的东西。



文章来源: WPF and string formatting