富文本框/流文档>格式化(列表顺序,行间距和子弹点)

时间:2014-03-13 07:21:31

标签: c# wpf richtextbox

我在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

虽然它在技术上有效,但经过数小时的挖掘后,我仍然会遇到一些格式问题,但我似乎无法克服或研究出来:

  1. 我想要将列表反转,最近的帖子是'在顶部。我已经能够通过几种不同的方式实现这一点,但每种方式都会失去以前的颜色格式化到控件的默认前景色(当间距是理想的需要时,应用程序有一个大约10行的可视缓冲区保留应用的颜色。

  2. 我希望行间距正常,没有行之间的填充。每个' post'之间有足够的空间可容纳2条线路。当使用列表时,我正在寻找类似于文本块的多行间距(见下面的屏幕链接)。

  3. 如果列表是要走的路,我很想摆脱要点。

  4. 一些注意事项:这一切都必须在后端完成,我想看一个平滑的自动滚动动画作为未来的功能发布,虽然我还没有研究过它(关闭) - 线程主题)。

    现在,我正在阅读的所有内容都让我相信richTextBox> flowDocument>列表是我最好的解决方案,因为我无法弄清楚AppendText()方法如何利用换行符(environment.NewLine有效,但是在使用其他控件时,在行之间有更大量的填充)也没有计算出颜色动态,但我是C#世界的新手。

    请先告诉我,我是否正在以艰难的方式这样做。但是,如果有人对如何实现上述目标有任何想法,那么我们将非常感激。

    以上语法的图片:

    enter image description here

    使用textblock生成所需间距的图像:

    提前致谢。

1 个答案:

答案 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");