WPF и форматирование строк - PullRequest
       19

WPF и форматирование строк

4 голосов
/ 22 сентября 2008

Предположим, у меня есть несколько XAML вроде этого:

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

Очевидно, я хочу символ новой строки в свойстве MyClass.Text, но синтаксический анализатор XAML создает объект с литеральной строкой "foo \ nbar".

Есть ли (а) способ убедить парсер перевести escape-последовательности или (б) метод .NET для интерпретации строки так, как это делает компилятор C #?

Я понимаю, что могу пойти туда в поисках \n последовательностей, но было бы лучше иметь общий способ сделать это.

Ответы [ 4 ]

13 голосов
/ 22 сентября 2008

Вы можете использовать экранирование символов XML

<TextBlock Text="Hello&#13;World!"/>
1 голос
/ 22 сентября 2008

Я понимаю, что могу пойти туда в поисках \ n последовательностей, [...]

Если все, что вас волнует, это \ n, то вы можете попробовать что-то вроде:

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();
    }
}
1 голос
/ 22 сентября 2008

С макушки головы, попробуйте;

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

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

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

  2. Сделать Text свойством по умолчанию для вашего элемента управления и;

<v:MyClass x:Key="whatever">
foo
bar
</v:MyClass>
0 голосов
/ 22 сентября 2008

Я бы использовал элемент управления TextBlock по умолчанию в качестве ссылки здесь. В этом элементе управления вы делаете разрывы строк следующим образом:

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

Вы должны иметь возможность сделать что-то похожее с вашим элементом управления, сделав значение содержимого вашего элемента управления свойством text.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...