WPF (irc) управление журналом чата - PullRequest
2 голосов
/ 31 декабря 2010

Я пытаюсь изучить WPF и думал о создании простого клиента IRC. Самое сложное - создать журнал чата. Я хочу, чтобы он выглядел более или менее как в mIRC:

alt text

или irssi:

alt text

Важными моментами являются то, что текст должен быть выбираемым, строки должны переноситься и иметь возможность обрабатывать довольно большие журналы.

Альтернативы, которые я могу придумать:

  1. StackPanel внутри ScrollViewer, где каждая строка представляет собой строку
  2. ListView, так как это кажется более подходящим для динамического связывания контента / данных.
  3. Создайте собственный элемент управления, который выполняет рендеринг самостоятельно.

Есть ли какой-нибудь гуру WPF, у которого есть идеи, в каком направлении двигаться и с чего начать?

Ответы [ 3 ]

2 голосов
/ 31 декабря 2010

Я предлагаю вам начать с хорошей объектной модели, независимой от пользовательского интерфейса, а затем попробовать многострочный TextBox или RichTextBox.

Будет ли этого достаточно, будет зависеть от того, как долго выхотите, чтобы журнал был в состоянии получить.Если у вас возникают проблемы с производительностью, вам, возможно, придется взглянуть на виртуализацию.

0 голосов
/ 31 декабря 2010

Я бы предложил также использовать RichTextBox и хранить элементы в файле журнала или базе данных, если у вас возникнут проблемы с производительностью.Другое решение заключается в использовании элемента управления WPF WebBrowser и изменении его содержимого HTML с помощью:

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

Дополнительная информация об использовании элемента управления WebBrowser

0 голосов
/ 31 декабря 2010

Прежде всего, вы должны рассмотреть, хотите ли вы выбрать только всю строку (как в списке), или если вы хотите выбрать определенные символы из строки (как в текстовом поле).

ВВ первом случае я думаю, что ListView или даже ListBox должно быть достаточно, оба они поддерживают виртуализацию при привязке к коллекции, и не должно быть проблем с огромными объемами данных.Панель стека внутри ScrollViewer немного напоминает изобретение колеса для этого случая, и создание нового элемента управления, на мой взгляд, не очень вдохновляет (поскольку требуемая функциональность может быть достигнута с помощью существующих элементов управления в WPF).

Во втором случае, если вы хотите выделить какой-либо текст внутри строки, или если вы хотите перенос слов для самых длинных строк в журнале и хотите выбрать отдельные части обернутых строк, вам нужноиспользовать элемент управления, более ориентированный на отображение текста.Кент уже предложил RichTextBox, я бы добавил элемент управления AvalonEdit или даже элемент управления WebBrowser , в котором вы напрямую изменяете его HTMLDocument.

...