WPF(irc)聊天日志控件

时间:2010-12-31 13:04:30

标签: c# wpf wpf-controls irc

我正在尝试学习WPF并且正在考虑创建一个简单的IRC客户端。最复杂的部分是创建聊天记录。我希望它看起来或多或少像mIRC中的那个:

alt text

或irssi:

alt text

重要的部分是文本应该是可选择的,行应该换行,它应该能够处理相当大的日志。

我能提出的替代方案是:

  1. ScrollViewer中的StackPanel,每行是一行
  2. ListView,因为它似乎更适合动态内容/数据绑定。
  3. 创建一个自己进行渲染的控件。
  4. 那里有没有WPF专家对于从哪个方向采取以及从哪里开始有一些想法?

3 个答案:

答案 0 :(得分:2)

我建议您从独立于用户界面的良好对象模型开始,然后尝试使用多行TextBoxRichTextBox

这些是否足够将取决于您希望日志能够获得多长时间。如果遇到性能问题,可能需要查看虚拟化。

答案 1 :(得分:0)

首先,您应该考虑是否只想选择整行(例如在列表框中),或者如果要从一行中选择某些字符(例如在文本框中)。

在第一种情况下,我认为ListView甚至ListBox应该足够了,它们都支持虚拟化,当绑定到集合时,大量数据应该没有问题。 ScrollViewer中的堆栈面板有点像为这种情况重新发明轮子,在我看来创建一个新的控件并不是一个非常灵感的方法(因为你想要的功能可以通过现有的控件在WPF中实现)。 / p>

在第二种情况下,如果要在一行内选择一些文本,或者如果要在日志中选择最长行的自动换行并想要选择包裹行的各个部分,则需要使用控制更多地面向显示文本。 Kent已经建议使用RichTextBox,我会添加AvalonEdit控件甚至是WebBrowser控件,您可以在其中直接修改其HTMLDocument。

答案 2 :(得分:0)

如果遇到性能问题,我建议也使用RichTextBox,并将项目存储在日志文件或数据库中。 另一种解决方案是使用WPF WebBrowser控件并使用以下命令修改其HTML内容:

webBrowser.NavigateToString("<HTML><H2><B>This page comes using String</B><P></P></H2></HTML>");

More information about using WebBrowser control