2010-12-07 123 views
0

我想我自己的即時消息器(聊天)。普通文本框不支持格式化/彩色文本。 我閱讀了一些關於WPF中Richtextbox的文章,並且使用Blocks,Paragraphs和Runs的新概念非常有趣。 序列化這些對象並將它們發送給其他聊天客戶端是否是一個好主意? (文本應格式化,如作者的原始文本) 如果我想將輸入文本框中的塊添加到輸出文本框(僅用於測試),我會得到塊/段落被其他richtextbox。 然後我保存這些對象的引用,將它從第一個文本框中移除並將它們添加到第二個文本框中。C#:即時消息器的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,因爲這將導致一個例外做到這一點。)

回答

1

我不認爲這是序列化對象發送到其他客戶端是一個好主意,因爲他們將有一些(可觀的)開銷。

我前段時間做過一個聊天應用程序,並且我在聊天窗口(它支持很多格式化,富媒體等)中使用(成功)WebBrowser作爲主控件,而且我只通過網絡發送html文本(加密)。

關於您的代碼,例如在兩個不同的控件中不能有相同的段落實例,因爲它是ContentElement - 就像在兩個不同的面板中不能具有相同的Label一樣。

+0

嗨安德烈,我可以從richtextbox的HTML文本? (我也想顯示圖像,這是可能的嗎?) – user437899 2010-12-07 10:01:13

1

Richtextbox的工作原理與我所做的即時聊天應用程序的魅力一樣,只要確保您研究Flowdocument的行爲並擴展其基類即可。所以你可以使用像更改c.q.屬性的東西。依賴項屬性,來編寫乾淨的代碼。事實上,在填寫一個段落時必須小心,它必須在控制器中的屬性上完成,而不是在表單後面的代碼中完成。如果你想保持你的代碼清潔。只需看看:http://www.lebroitsolutions.nl/en/projects-chat.aspx。您可以在哪裏下載代碼,並提供更多信息。流式文檔(而不是整個richtextbox)的開銷很小。