博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF一步步开发XMPP IM客户端2:主窗体设计
阅读量:4135 次
发布时间:2019-05-25

本文共 3010 字,大约阅读时间需要 10 分钟。

UI设计方案:

 

在设计窗体UI之前,先要了解一些主要的接口和帮助类:

对于主窗的左侧列表,容器内的Item必须实现ILeftItem的接口,比如联系人、系统消息、群等,接口包含点击事件

public interface ILeftItem{  void Click();}

项目的最外围容器是MainWindow,他涵盖了第一级菜单、第二级菜单、内容区等

其中更新菜单是在类UIStatic中:

    ///         /// 设置第一级"业务"菜单文本        ///         internal static void SetBussTabText(string str)        {            mainWindow.SetBussTabText(str);        }        ///         /// 设置第一级"聊天"菜单文本        ///         ///         internal static void SetHomeTabText(string str)        {            mainWindow.SetHomeTabText(str);        }        ///         /// 更新子菜单        ///         internal static void SetHomeTabSubText()        {            mainWindow.SetHomeSubTabText();        }

 

SetHomeSubTabText是更新子菜单,在MainWindow中实现,代码形如:
public void SetHomeSubTabText()        {            Link lkChat = new Link();            lkChat.DisplayName = "Contact";            lkChat.Source = new Uri(@"/Pages/Home.xaml", UriKind.Relative); ;            tabHome.Links.Add(lkChat);            Link lkMucChat = new Link();            lkMucChat.DisplayName = "Group Chat";            lkMucChat.Source = new Uri(@"/Pages/MucHome.xaml", UriKind.Relative); ;            tabHome.Links.Add(lkMucChat);            ......        }
登陆后,进入的UI是Home.xmal,UI初始化的逻辑是左侧的列表由本地数据库查询生成,形成初始左侧List UI,自动绑定数据源 LeftListView.ItemsSource = itemsList; 消息、IQ的监听事件也在该方法进行:
private void BuildUI()        {            UIStatic.mainHome = this;            if (Config.IsCheckPresence)            {                XmppStatic.xmppCon.OnRosterStart += new ObjectHandler(xmppCon_OnRosterStart);                XmppStatic.xmppCon.OnRosterItem += new XmppClientConnection.RosterHandler(xmppCon_OnRosterItem);                XmppStatic.xmppCon.OnRosterEnd += new ObjectHandler(xmppCon_OnRosterEnd);                XmppStatic.xmppCon.OnPresence += new PresenceHandler(xmppCon_OnPresence);            }            XmppStatic.xmppCon.OnIq += new IqHandler(xmppCon_OnIq);            XmppStatic.xmppCon.OnMessage += new MessageHandler(xmppCon_OnMessage);            LoadListViewDataFromDB();            LeftListView.ItemsSource = itemsList;            if (!Config.IsDebug)            {                LogTextBox.Visibility = System.Windows.Visibility.Hidden;                LogTextBox.Height = 1;            }        }
View Code

 

当新消息到来,在HandleMessage中处理。

 
private void HandleMessage()        {            if (NewestMSG.Type == MessageType.chat)//单聊            {                SetChatPanelUI(new ChatRoom(NewestMSG.From.Bare, NewestMSG.From.Bare));                UpdateMessageArea();            }            else //系统消息            {                if (NewestMSG.Type == MessageType.groupchat) // MUC服务                {                    SetChatPanelUI(new MUChatRoom(NewestMSG.From.Bare, NewestMSG.Body.ToString()));                    UpdateMessageArea();                }                else if (NewestMSG.Type == MessageType.error) // Error                {                }                else //公告                {......

 

代码下载地址:https://lightchat.codeplex.com/

 

转载地址:http://btpvi.baihongyu.com/

你可能感兴趣的文章
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>
组队总结
查看>>
TitledBorder 设置JPanel边框
查看>>
DBCP——开源组件 的使用
查看>>
抓包工具
查看>>
海量数据相似度计算之simhash和海明距离
查看>>
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
查看>>
DeepLearning tutorial(6)易用的深度学习框架Keras简介
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>
流形学习-高维数据的降维与可视化
查看>>
Python-OpenCV人脸检测(代码)
查看>>
python+opencv之视频人脸识别
查看>>
人脸识别(OpenCV+Python)
查看>>
6个强大的AngularJS扩展应用
查看>>
网站用户登录系统设计——jsGen实现版
查看>>
第三方SDK:讯飞语音听写
查看>>
第三方SDK:JPush SDK Eclipse
查看>>