WPF и форматирование строк
Вопрос
Предположим, у меня есть такой XAML:
<Window.Resources>
<v:MyClass x:Key="whatever" Text="foo\nbar" />
</Window.Resources>
Очевидно, мне нужен символ новой строки в свойстве MyClass.Text, но анализатор XAML создает объект с помощью буквальной строки «foo bar».
Есть ли (а) способ убедить синтаксический анализатор транслировать escape-последовательности или (б) метод .NET для интерпретации строки так, как это сделал бы компилятор C#?
Я понимаю, что могу пойти туда и поискать \n
последовательности, но было бы лучше иметь универсальный способ сделать это.
Решение
Вы можете использовать экранирование символов XML
<TextBlock Text="Hello World!"/>
Другие советы
С первого взгляда, попробуйте;
- Возможно, пользовательское выражение привязки?
<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>
Использовать строковый статический ресурс?
Сделайте Text свойством по умолчанию вашего элемента управления и;
<v:MyClass x:Key="whatever"> foo bar </v:MyClass>
Я понимаю, что могу пойти туда и поискать последовательности , [...]
Если все, что вас волнует, это , вы можете попробовать что-то вроде:
string s = "foo\\nbar";
s = s.Replace("\\n", "\n");
Или, для б), поскольку я не знаю и не могу найти встроенную функцию для этого, что-то вроде:
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>
Вы сможете сделать что-то подобное со своим элементом управления, сделав значением содержимого вашего элемента управления свойство text.