SilverLight搭建WCF聊天室详细过程(六)打开聊天窗口
时间:2010-12-26 来源:fugitiver
上一节为大家讲解了如何实现用户上线、下线的状态显示,以及在线人数更新,这样我们就可以继续下一步,打开聊天窗口,这节比较简单,我直接贴出关键代码,再为大家讲解思路:

public void chatForm_Click(object sender, RoutedEventArgs e)
{
chatform form = creatWindow((sender as Button).Content.ToString());
}
//创建聊天窗口
private chatform creatWindow(string userName)
{
//判断将要打开的聊天对象是否存在,如果存在则返回已存在窗口,不存在则新建窗口
if (chatforms.Values.Contains(userName))
{
return chatforms.Where(f => f.Value.ToString() == userName).First().Key;
}
else
{
chatform form = new chatform();
form.SetValue(Grid.RowProperty, 1);
form.SetValue(Grid.ColumnProperty, 1);
//聊天对象头像
form.imaChatUser.Source = ((operation.btUserList.Where(f => f.Content.ToString() == userName).First().Parent as StackPanel).Children[0] as Image).Source;
//窗口拖动
form.MouseLeftButtonDown += new MouseButtonEventHandler(operation.MouseLeftButtonDown);
form.MouseLeftButtonUp += new MouseButtonEventHandler(operation.MouseLeftButtonUp);
form.MouseMove += new MouseEventHandler(operation.MouseMove);
form.tbChatName.Text = userName;//聊天对象姓名
LayoutRoot.Children.Add(form);//添加到主窗体
chatforms.Add(form, userName);//添加到已打开窗口字典
return form;
}
}
思路:首先定义字典public Dictionary<chatform, string> chatforms = new Dictionary<chatform, string>();,这个字典为聊天窗口和聊天对象的用户名组成,目的是为以后功能查找具体聊天窗口提供方便,当用户点击好用列表中的一个时,将首先查找chatforms里是否存在这个窗口,如果存在直接返回,如果不存在则新建,这样就避免了重复打开窗体,在函数中定义了窗口移动事件。
谢谢大家每次的意见,这次讲解占了大部分,希望对新手入门带来帮助,如果各位朋友觉得有所帮助,希望大家点下推荐,你们的支持才是我更新博客的动力,谢谢大家。
相关阅读 更多 +
排行榜 更多 +