我在WPF应用程序中有一个RichTextBox
,用作状态更新的输出容器。添加的每一行都根据其信息级别(警告黄色,信息灰色等)进行着色。
Paragraph currentStatus = new Paragraph(new Run("ERROR: Couldn't find stuffs."));
currentStatus.Foreground = System.Windows.Media.Brushes.Red;
List myList = new List();
myList.ListItems.Add(new ListItem(currentStatus));
rtbStatus.Document.Blocks.Add(myList); // existing rich textbox
虽然它在技术上有效,但经过数小时的挖掘后,我仍然会遇到一些格式问题,但我似乎无法克服或研究出来:
我想要将列表反转,最近的帖子是'在顶部。我已经能够通过几种不同的方式实现这一点,但每种方式都会失去以前的颜色格式化到控件的默认前景色(当间距是理想的需要时,应用程序有一个大约10行的可视缓冲区保留应用的颜色。
我希望行间距正常,没有行之间的填充。每个' post'之间有足够的空间可容纳2条线路。当使用列表时,我正在寻找类似于文本块的多行间距(见下面的屏幕链接)。
如果列表是要走的路,我很想摆脱要点。
一些注意事项:这一切都必须在后端完成,我想看一个平滑的自动滚动动画作为未来的功能发布,虽然我还没有研究过它(关闭) - 线程主题)。
现在,我正在阅读的所有内容都让我相信richTextBox> flowDocument>列表是我最好的解决方案,因为我无法弄清楚AppendText()方法如何利用换行符(environment.NewLine有效,但是在使用其他控件时,在行之间有更大量的填充)也没有计算出颜色动态,但我是C#世界的新手。
请先告诉我,我是否正在以艰难的方式这样做。但是,如果有人对如何实现上述目标有任何想法,那么我们将非常感激。
以上语法的图片:
使用textblock生成所需间距的图像:
提前致谢。
答案 0 :(得分:0)
我找到了一些允许我完成此操作的属性,所以我删除了列表,经过一些调整后得出了以下内容:
// Status Update
public void UpdateStatus(string eventLevel, string message)
{
Paragraph currentStatus = new Paragraph(new Run(message));
if (eventLevel == "info")
currentStatus.Foreground = System.Windows.Media.Brushes.Gray;
if (eventLevel == "warning")
currentStatus.Foreground = System.Windows.Media.Brushes.Yellow;
if (eventLevel == "error")
currentStatus.Foreground = System.Windows.Media.Brushes.Red;
if (eventLevel == "highlight")
currentStatus.Foreground = System.Windows.Media.Brushes.CornflowerBlue;
currentStatus.LineHeight = 1;
rtbStatus.Document.Blocks.InsertBefore(rtbStatus.Document.Blocks.FirstBlock, currentStatus);
}
现在可以将彩色线附加到' top'最小的行间距:
UpdateStatus("error", "My custom error message");