C #: Richtextbox для мгновенного обмена сообщениями (чат) - PullRequest
0 голосов
/ 07 декабря 2010

Я хочу свой Мгновенный Мессенджер (Чат). И обычное текстовое поле не поддерживает форматированный / цветной текст. Я прочитал несколько статей о Richtextbox в WPF, и новая концепция с Blocks, Paragraphs и Runs довольно интересна. Это хорошая идея, чтобы сериализовать эти объекты и отправить их другим чат-клиентам? (Текст должен быть отформатирован, как оригинальный текст автора) Если я хочу добавить блоки из текстового поля ввода в текстовое поле вывода (только для тестирования), я получаю исключение, что блоки / абзацы используются другим richtextbox. Затем я сохранил ссылку из этих объектов, удалил ее из первого текстового поля и добавил их во второе текстовое поле.

 For example:


    FlowDocument oldTextDocument = richTextBoxMessageBox.Document;

            richTextBoxMessageBox.Document = new FlowDocument();

            while(oldTextDocument.Blocks.Count > 0)
            {
                richTextBoxChatHistory.Document.Blocks.Add(oldTextDocument.Blocks.FirstBlock);
            }

(я не могу сделать это для for-each, потому что это вызовет исключение.)

Ответы [ 2 ]

1 голос
/ 29 мая 2011

Richtextbox работает как заклинание для приложения для мгновенного чата, которое я сделал, просто убедитесь, что вы изучили поведение Flowdocument и расширили ее базовый класс.Таким образом, вы можете использовать такие вещи, как свойство измененного свойства зависимостей cq, для написания чистого кода.На самом деле вы должны быть осторожны при заполнении абзаца, это должно быть сделано для свойства в контроллере, а не в коде позади формы.Если вы хотите сохранить свой код в чистоте.Просто взгляните на: http://www.lebroitsolutions.nl/en/projects-chat.aspx. Где вы можете скачать код, и я предоставил дополнительную информацию.Затраты на потоковую передачу потокового документа (не richtextbox в целом) минимальны.

1 голос
/ 07 декабря 2010

Я не думаю, что это хорошая идея отправлять сериализованные объекты другим клиентам, потому что они будут иметь некоторые (значительные) накладные расходы.

Я некоторое время назад сделал приложение чата и использовал (успешно)) веб-браузер в качестве основного элемента управления в окнах чата (который поддерживает много форматирования, мультимедиа и т. д.), и я отправляю только по сети HTML-текст (в зашифрованном виде). ​​

Что касается вашего кода, вы не можетеиметь один и тот же экземпляр Paragraph, например, в двух разных элементах управления, потому что это ContentElement - как вы не можете иметь одну и ту же метку на двух разных панелях.

...