WPF C # Как установить форматированный текст в TextBlock, используя свойство Text - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно установить текст кода TextBlock за строкой, содержащей форматированный текст.

Например, эта строка:

"This is a <Bold>message</Bold> with bold formatted text"

Если я помещу этот текст в файл xaml втаким образом, он работает правильно

<TextBlock>
  This is a <Bold>message</Bold> with bold formatted text
</TextBlock>

Но если я установлю его, используя свойство Text, не будет работать.

string myString = "This is a <Bold>message</Bold> with bold formatted text";
myTextBlock.Text = myString;

Я знаю, что могу использовать Inlines:

myTextBlock.Inlines.Add("This is a");
myTextBlock.Inlines.Add(new Run("message") { FontWeight = FontWeights.Bold });
myTextBlock.Inlines.Add("with bold formatted text");

Но проблема в том, что я получаю строку как есть из другого источника, и я понятия не имею, как я могу передать эту строку в TextBlock и посмотреть, отформатирован ли он.Я надеюсь, что есть способ установить содержимое TextBlock непосредственно с отформатированной строкой, потому что я понятия не имею, как я могу проанализировать строку, чтобы использовать ее с Inlines.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете проанализировать TextBlock из вашей строки и вернуть коллекцию его Inlines:

private IEnumerable<Inline> ParseInlines(string text)
{
    var textBlock = (TextBlock)XamlReader.Parse(
        "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">"
        + text
        + "</TextBlock>");

    return textBlock.Inlines.ToList(); // must be enumerated
}

Затем добавить коллекцию в ваш TextBlock:

textBlock.Inlines.AddRange(
    ParseInlines("This is a <Bold>message</Bold> with bold formatted text"));
0 голосов
/ 28 ноября 2018

TextBlock не будет поддерживать это напрямую, вам придется написать метод для самостоятельного анализа строки и установки стилей для встроенных строк.Не выглядит так сложно разобрать.Используйте регулярные выражения или парсер токена.Зависит от того, сколько разных стилей вам нужно поддерживать, но Regex - более простой подход.

...