c#用于显示文本文件的wpf控件

时间:2011-05-21 08:43:53

标签: c# wpf-controls

在wpf应用程序中用于加载大文本文件的最佳控件是什么?而且它不仅仅是那么简单,我需要能够高亮/改变某些线条的背景/颜色。我正在考虑使用RichTextBox ..但是我只是来问其他人的想法。

我不需要编辑文字,只需突出显示有错误的行

编辑:啊我忘了提,文本文件内容是由程序处理的,会改变某些行的背景颜色。当程序错误地找到一些错误行时,给用户做一个改变就好了。

EDIT2:该应用程序用于解析日志文件,因此文件可能很大,超过50 000行..

2 个答案:

答案 0 :(得分:2)

我不明白你是否只想显示文件或允许用户编辑它们。

无论哪种方式,也许ScintillaNET对您有用。

众所周知的文本编辑器,Notepad ++使用Scintilla :)

你可以在http://sourceforge.net/projects/notepad-plus/获取notepad ++源代码,但是它是用c ++编写的,所以API与.NET有点不同。

修改

Notepad ++能够显示大约100-200MB的文件。如果您需要更好的,则需要实现某种分页技术/虚拟模式(不要加载整个文件,只根据当前滚动条位置加载屏幕上显示的部分)

如果Scintilla看起来有点矫枉过正,那么你可能只需要构建一个DataGrid就可以了。如果日志条目由多个字段组成,则这些字段可能会成为列,甚至更容易阅读。如果要转到该路径,首先将日志文件解析为LogEntry列表,然后使用数据绑定绑定到它。随着新行的添加,您可以逐步读取文件,以获得更好的用户体验。

答案 1 :(得分:1)

我认为RichTextBox在这种情况下是最合适的,但正如CharithJ所说,你不能一次加载整个登录它会导致性能过高。

我会在这样的场景中做的是......我会有一个Richtextbox以及两个小的向上和向下按钮来进行滚动。我只会一次加载一些日志文本,让我们说x个字符。一旦用户单击向上或向下滚动按钮,我将从开始和结束中删除一些文本,具体取决于用户点击了哪个按钮,向上或向下,并根据我将从richbox中删除一些文本并附加其他文本。

您可以执行上面建议的操作,或者另一种方法是扩展RichTextBox控件并实现仅将有限文本转发到RichTextBox以便一次显示的逻辑。您可以处理滚动相关事件以在RichTextBox的内容中进行更改。