【问题标题】:WPF (irc) chat log controlWPF (irc) 聊天记录控件
【发布时间】:2010-12-31 13:04:30
【问题描述】:

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

或 irssi:

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

我能想到的替代方案是:

  1. ScrollViewer 中的 StackPanel,其中每一行都是一行
  2. ListView,因为这似乎更适合动态内容/数据绑定。
  3. 创建一个自己的控件,它自己进行渲染。

是否有任何 WPF 大师对采取哪个方向以及从哪里开始有一些想法?

【问题讨论】:

    标签: c# wpf wpf-controls irc


    【解决方案1】:

    我建议你从一个独立于 UI 的良好对象模型开始,然后尝试多行 TextBoxRichTextBox

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

    【讨论】:

    • 有时最简单的解决方案是最好的。我还修改了段落样式以在除第一行之外的所有行上获得一些缩进:
    【解决方案2】:

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

    第一种情况,我觉得一个ListView甚至一个ListBox就够了,绑定collection的时候都支持虚拟化,海量数据应该没有问题。 ScrollViewer 中的堆栈面板有点像在这种情况下重新发明轮子,并且在我看来,创建一个新控件并不是一种很有启发性的方法(因为您想要的功能可以通过 WPF 中的现有控件实现)。

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

    【讨论】:

      【解决方案3】:

      如果您遇到性能问题,我建议也使用 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

      【讨论】:

        猜你喜欢
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多