Был проект на 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 строк начинаются лаги в элементе при добавлении новой строки. Пока использую костыль - периодическую очистку контрола. Но это не комильфо.
Ответ частично содержался в этом вопросе. Конечный вариант оказался более лаконичен, чем для 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 });
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости