WPF RichTextBox: Как добавить разные цвета в одном предложении в Run (текст)? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть клиент, разговаривающий с сервером.Сервер может отправить обратно буфер как «Боб: здесь кто-нибудь есть?»Вы можете думать об этом как о чате.

До первого появления ':' я хотел бы сделать это слово зеленым.Все справа от ':' останется белым.

Как я могу это сделать?Я обнаружил, что это не так просто.

Это записывает входящее текстовое сообщение в RichTextBox:

public void WriteLine(string text)
{
    Paragraph para = new Paragraph(); 

    // Buffer output
    para.Inlines.Add(new Run(text));

    // Add block
    txtOutput.Document.Blocks.Add(para);

    // Always keep scrolled to the end
    txtOutput.ScrollToEnd();

    // Clear input field.
    txtInput.Clear();

    // Focus back on the input field.
    txtInput.Focus();
}

Моя попытка:

// Output buffer
para.Inlines.Add(new Run { Text = text, Foreground = Brushes.Green, FontWeight = FontWeights.Bold });

Проблема с этим способом заключается в том, что вся строка будетзеленый.Мне нужен этот формат:

Имя (зеленый): Вывод (белый).

Пожалуйста, дайте мне знать.Спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Перед первым появлением ':' я бы хотел сделать это слово зеленым.Все справа от ':' останется белым.

Исходя из ваших требований, все, что вам нужно сделать, это разделить текст и добавить два Run к вашему абзацу.

Проверьте приведенный ниже код.

public void WriteLine(string text)
{
    Paragraph para = new Paragraph();

    //Split the content from text

    var content = text.Split(':');

    // Buffer output
    para.Inlines.Add(new Run { Text = content[0] + ": ", Foreground = Brushes.Green, FontWeight = FontWeights.Bold });
    para.Inlines.Add(new Run { Text = content[1], Foreground = Brushes.White, FontWeight = FontWeights.Regular });

    // Add block
    txtOutput.Document.Blocks.Add(para);

    // Always keep scrolled to the end
    txtOutput.ScrollToEnd();

    //// Clear input field.
    //txtInput.Clear();

    //// Focus back on the input field.
    //txtInput.Focus();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...