user408952
user408952

Reputation: 932

WPF (irc) chat log control

I'm trying to learn WPF and was thinking about creating a simple IRC client. The most complicated part is to create the chat log. I want it to look more or less like the one in mIRC:

alt text

or irssi:

alt text

The important parts are that the text should be selectable, lines should wrap and it should be able to handle quite large logs.

The alternatives that I can come up with are:

  1. StackPanel inside a ScrollViewer where each line is a row
  2. ListView, since that seems more suitable for dynamic content/data binding.
  3. Create an own control that does the rendering on its own.

Is there any WPF guru out there that has some ideas on which direction to take and where to start?

Upvotes: 2

Views: 1892

Answers (3)

Pascal Bayer
Pascal Bayer

Reputation: 2613

I would suggest to use RichTextBox too, and store items in a log file or database, if you run into performance issues. Another solution is to use the WPF WebBrowser control and modifiy its HTML content with:

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

More information about using WebBrowser control

Upvotes: 0

Kent Boogaart
Kent Boogaart

Reputation: 178630

I suggest you start with a good object model independent of the UI, and then try a multi-line TextBox or a RichTextBox.

Whether these will suffice will depend on exactly how long you want the log to be able to get. If you run into performance issues, you may need to look at virtualization.

Upvotes: 2

Andrei Pana
Andrei Pana

Reputation: 4502

First of all, you should consider if you want to select only entire row (like in a listbox), or if you want to select certain characters from a row (like in a textbox).

In the first case, I think a ListView or even a ListBox should be enough, both of them support virtualization when bound to collection and there should be no problem with huge amounts of data. A stack panel inside a ScrollViewer is a little bit like reinventing the wheel for this case and creating a new control is not a very inspired approach in my opinion (as the functionality you want can be achieved with the existing controls, in WPF).

In the second case, if you want to select some text inside of a line, or if you want word wrapping for your longest lines in the log and want to select individual parts of the wrapped lines, then you need to use a control more oriented on displaying text. Kent already suggested a RichTextBox, I would add AvalonEdit control or even the WebBrowser control in which you directly modify its HTMLDocument.

Upvotes: 0

Related Questions