文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SilverLight搭建WCF聊天室详细过程(九)接收文本消息

SilverLight搭建WCF聊天室详细过程(九)接收文本消息

时间:2010-12-26  来源:fugitiver

        上一节为大家讲解了发送消息思路,既然发送消息为拆分xaml过程,那接收消息就是组装过程,先给出流程图:

        流程图讲解:用户发送消息先调用WCF接口函数message(),同时调用rMessage()函数用来生成自己发送消息到自己的聊天窗口显示,服务端查找接收方通道然后回调客户端,客户端调用rMessage()函数生成聊天内容。

        主要代码:

 

代码 //接收到文本消息
        //姓名和时间
        string nameTime = null;
        string contentEach = null;
        string nameColor = "red";
        public void rMessage(string sendUser, string content, string sendTime)
        {
            //姓名和时间颜色
            nameColor = (sendUser == operation.currentUserName) ? "red" : "blue";
            //姓名和时间
            nameTime = "<Paragraph xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" FontSize=\"16\" Foreground=\"" + nameColor + "\"><Run Text=\"" + sendUser + " " + sendTime + "\" /></Paragraph>";
            rtbReceiveContent.Blocks.Add((Paragraph)System.Windows.Markup.XamlReader.Load(nameTime));
            //richtextbox每段消息都存放在<Paragraph>里,循环每段消息创建对象
            while (content.Contains("Paragraph"))
            {
                contentEach = content.Substring(0, content.IndexOf("</Paragraph>") + 12);
                content = content.Substring(content.IndexOf("</Paragraph>") + 12);
                //在<Paragraph>里插入默认命名空间
                contentEach = contentEach.Insert(10, " xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" ");
                rtbReceiveContent.Blocks.Add((Paragraph)System.Windows.Markup.XamlReader.Load(contentEach));
                //让滚动条一直出于下方
                rtbReceiveContent.SelectAll();
            }

        }

 

        思路:先生成接收方姓名,根据接受方和发送方用不同颜色来显示名称,rtbReceiveContent.Blocks.Add((Paragraph)System.Windows.Markup.XamlReader.Load(nameTime));
这段代码我着重解释下,RichTextBox每段内容都可以用Block表示,而Blocks是block的一个内容集合,System.Windows.Markup.XamlReader.Load()这个函数可以在代码中执行xaml,所以我们可以很方便把xaml的<Paragraph>内容添加为一个Block块,这样就显示了一段内容,下面的while循环用来处理发送过来的xaml代码,因为我们发送的文本不可能只有一段内容,而每段内容都是一个<Paragraph></Paragraph>,看到这相信朋友们都想到了,可以用循环,每生成一段内容就把以生成的从接收到的内容流里删除,做这样的处理我们就可以很完整的还原发送方的显示状态。

         注意:这里要提醒大家,因为发送时我们去掉了<Setion>,这样就不再存在明明空间,所以,我们要在每一段内容里插入" xmlns=\http://schemas.microsoft.com/winfx/2006/xaml/presentation\默认明明控件,位置就在“<Paragraph”后面。不然会出现异常。

         rtbReceiveContent.SelectAll();在这里加上这个函数,因为动态添加Block时,RichTextBox的滚动条一直出于上方,我们没有办法控制滚动条位置,所以只能使用这个函数来让滚动条位置出于下方,也许会损失极小的效率,如果有朋友有别的解决办法可以留言,谢谢大家!

        谢谢大家每次的意见,这次讲解占了大部分,希望对新手入门带来帮助,如果各位朋友觉得有所帮助,希望大家点下推荐,你们的支持才是我更新博客的动力,谢谢大家。

        本节代码及数据库下载

相关阅读 更多 +
排行榜 更多 +
我的武侠梦手游下载

我的武侠梦手游下载

角色扮演 下载
快乐连连看下载免费版

快乐连连看下载免费版

休闲益智 下载
泛滥死者布道手机版下载

泛滥死者布道手机版下载

角色扮演 下载