Аналог RichTextBox в качестве логгера для WPF

255
19 июня 2018, 10:30

Был проект на WinForms и в окне для вывода лога выполнения программы использовался RichTextBox со следующим кодом:

private void writeLog(string line, MessageType type)
{
    this.richTextBox.SelectionStart = this.richTextBox.TextLength;
    this.richTextBox.SelectionLength = 0;
    this.richTextBox.SelectionColor = getDrawColor(type);
    this.richTextBox.AppendText((this.richTextBox.TextLength > 0 ? "\r\n" : "") + line);
    this.richTextBox.SelectionColor = this.richTextBox.ForeColor;
    this.richTextBox.ScrollToCaret();
}
private Color getDrawColor(MessageType type)
{
    switch (type)
    {
        case MessageType.SUCCESS:
            return Color.Green;
        case MessageType.WARNING:
            return Color.Red;
        case MessageType.SYSTEM:
            return Color.Blue;
        default:
            return Color.Black;
    }
}

Подскажите что лучше использовать для WPF окна или как переделать имеющийся элемент. Как я уже успел заметить свойства некоторых контролов в WPF очень сильно изменены.

Пробовал использовать TextBox, но после 200-300 строк начинаются лаги в элементе при добавлении новой строки. Пока использую костыль - периодическую очистку контрола. Но это не комильфо.

Answer 1

Ответ частично содержался в этом вопросе. Конечный вариант оказался более лаконичен, чем для WinForms.

private void writeLog(string line, MessageType type)
{
    Paragraph para = (Paragraph) this.richTextBox.Document.Blocks.FirstBlock;
    SolidColorBrush color;
    switch (type)
    {
        case MessageType.SUCCESS:
            color = System.Windows.Media.Brushes.Green;
            break;
        case MessageType.WARNING:
            color = System.Windows.Media.Brushes.Red;
            break;
        case MessageType.SYSTEM:
            color = System.Windows.Media.Brushes.Blue;
            break;
        default:
            color = System.Windows.Media.Brushes.Black;
            break;
    }
    if (para.Inlines.Count > 0)
        para.Inlines.Add(new LineBreak());
    para.Inlines.Add(new Run(line) { Foreground = color });
}
READ ALSO
Запись и чтение из xml в dataGridView

Запись и чтение из xml в dataGridView

На форме (c# winforms vs2010) есть dataGridView1 и dataGridView2При запуске формы dataGridView1 заполняется из файла mdb

282
Построение TreeView в ASP.NET MVC

Построение TreeView в ASP.NET MVC

Подскажите пожалуйста что здесь не так: Это работает:

257
как записать в массив числа textbox?

как записать в массив числа textbox?

как записать в массив числа из textbox разделенных пробелом? Допустим, пользователь ввел 12 12 4 6 7 9 - получилось 6 элементов массива, b[0] = 12, b[1] = 12,

250