创建一个聊天窗口,显示不同颜色的特定文本WPF 4

时间:2011-02-25 03:03:14

标签: c# .net wpf richtextbox

我编写了一个多用途应用程序,将在遍布全国的网络中使用。该应用程序的一部分是订购线系统,它允许一个工作站与另一个工作站进行通信,或者使用以全屏模式运行的软件进行连接。

使用WPF我有一个性感的界面,有一个可爱的配色方案,我想在使用WPF的RichEditBox控件时保留。我最后一次使用丰富的编辑控件回到了MFC的嗨日;我试图通过WPF完成任务,感到非常震惊。

所以基本上当用户发送消息时会发生什么(就像在大多数聊天应用中一样),

“UserName:Message blah blah blah”将显示在文本框中。我想要的只是拥有UserName:一种颜色而另一种颜色。简单的我想。

我乱了一会儿无济于事,读了一些教程,撕掉了一些头发,厌恶地扔了我的键盘,冲了出来......只是为了回来又有另一个裂缝。我读过的文章对于我想要的东西来说太复杂了,会把程序放慢到爬行或不做我需要的东西......所以,我想出了这种简单化的方法。请随时用更好的方法修改我的解决方案。这完全符合我的要求。

对不起,如果这个一步一步的方法是针对你的n00b,我尽量为那些经验较少的人提供描述,因为我们都曾经有过。

<RichTextBox x:Name="textbox_chat_wnd" Height="100" Background="#FF2A2D30" IsReadOnly="True">
    <FlowDocument Name="flowdoc_chat_wnd"/>
</RichTextBox>

所以我们创建了RichTextBox,命名它并命名流文档。

好的,所以我收到了来自其他用户的消息,现在它存储在字符串strMessage中。好。该消息包括发送它的人的用户名和消息,用分号分隔,因此我在其上调用string.split:)

//Split message by first semi-colon. Ignore all others
string[] strSplit = strMessage.Split(new string[]{":"}, 2, StringSplitOptions.None);

//Create new paragraph and set line spacing to 1. Prevents massive line gaps
Paragraph p_Paragraph = new Paragraph();
p_Paragraph.LineHeight = 1;

//Create Run object that contains the name of the user + semicolon
//then set the colour of the text.
Run r_User = new Run(strSplit[0] + ": ");
r_User.Foreground = Brushes.GreenYellow;

//Message run object, set colour.
Run r_Message = new Run(strSplit[1]);
r_User.Foreground = Brushes.Silver;

//Add the two run objects to our paragraph:
p_Paragraph.Inlines.Add(r_User);
p_Paragraph.Inlines.Add(r_Message);

//Add the paragraph to the flow document as a block
flowdoc_chat_wnd.Blocks.Add(p_Paragraph);

//Scroll to the end of the control
textbox_chat_wnd.ScrollToEnd();

我希望这可以帮助某人,并且足够清楚地了解想要实现的目标以及如何实现目标。

同样,我期待看到改进的方法来实现这一点,并听取你的想法。

谢谢,

1 个答案:

答案 0 :(得分:1)

我前段时间写了一个类似的聊天应用程序,我使用了WebBrowser控件,修改了它后面的HTMLDocument对象,并使用HTML来改变颜色,显示表情符号。我记得我当时测试了一点WPF RichTextBox控件,在添加了大约1000行之后变得非常慢,在一个简单的Add(new Run())Add(new Paragraph())场景中,所以我使用了WebBrowser控件,它可以用于聊天应用程序(只要你不需要编辑功能)。