Вопрос

Предположим, у меня есть такой 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&#13;World!"/>

Другие советы

С первого взгляда, попробуйте;

  1. Возможно, пользовательское выражение привязки?

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

  1. Использовать строковый статический ресурс?

  2. Сделайте 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top