先看效果图:这个是折叠特效。

代码结构:

     model是我们的数据模型,定义了在列表显示的人物名称   图片   简介    。

Resource是我们的图片资源  和 存储图片资源路径、名称的资源文件。

GroupListCreate是我们的主要创建列表的模块。

代码如下:

public StackPanel CreateModuleEntry(List<GroupPerson> hrvGroups){if (hrvGroups != null){StackPanel spl = new StackPanel();   //创建一个最外围的框List<GroupPerson> groups = hrvGroups;foreach (GroupPerson g in groups)      //根据分组去遍历
                {int count = 1;Expander ex = new Expander();     //每一个分组ex.Header = g.Name;List<Person> modules = new List<Person>();modules = g.Persons;StackPanel sp = new StackPanel();     //每一个分组的框foreach (Person m in modules){DockPanel dp = new DockPanel();if (count >= 2){Thickness dpMargin = new Thickness(0, 10, 0, 0);dp.Margin = dpMargin;}dp.MouseLeave += new System.Windows.Input.MouseEventHandler(dp_MouseLeave);dp.MouseEnter += new System.Windows.Input.MouseEventHandler(dp_MouseEnter);dp.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(dp_MouseLeftButtonDown);dp.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(dp_MouseLeftButtonUp);//人物头像Bitmap bm = new Bitmap(ImagePathResource.ImageSource+m.Ico);MemoryStream ms = new MemoryStream();bm.Save(ms, System.Drawing.Imaging.ImageFormat.Png);BitmapImage bi = new BitmapImage();bi.BeginInit();bi.StreamSource = new MemoryStream(ms.ToArray());bi.EndInit();ms.Dispose();System.Windows.Controls.Image image = new System.Windows.Controls.Image();Thickness imageMargin = new Thickness(0, 0, 0, 0);image.Margin = imageMargin;image.Source = bi;image.Width = 50;image.Height = 50;image.Stretch = Stretch.Fill;//人物名称Label lblName = new Label();Thickness lblNameMargin = new Thickness(15, 0, 0, 0);lblName.Margin = lblNameMargin;lblName.Height = 25;lblName.Content = m.Name;lblName.FontSize = 13;lblName.FontWeight = FontWeights.Bold;//人物说明WrapPanel dpl = new WrapPanel();Thickness t3 = new Thickness(15, 0, 0, 0);dpl.Margin = t3;//说明文字的自动换行for (int i = 0; i < m.Introduction.Length; i++){string s = m.Introduction.Substring(i, 1);Label lblResume = new Label();lblResume.Content = s;dpl.Children.Add(lblResume);}dpl.ItemHeight = 18;dp.Children.Add(image);dp.Children.Add(lblName);dp.Children.Add(dpl);DockPanel.SetDock(image, Dock.Left);DockPanel.SetDock(lblName, Dock.Top);sp.Children.Add(dp);count++;}ex.Content = sp;spl.Children.Add(ex);}return spl;}return null;}

View Code

这里我们直接返回一个stackpanel用来在界面展示,这样自动创捷列表基本上就完成了。
里面的四个事件是用来做鼠标浮动其上和按下的效果

void dp_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e){dp = sender as DockPanel;dp.Background = System.Windows.Media.Brushes.LightGray;}DockPanel dp = null;void dp_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e){dp = sender as DockPanel;dp.Background = System.Windows.Media.Brushes.LightGray;}void dp_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e){dp = sender as DockPanel;dp.Background = System.Windows.Media.Brushes.Gray;}void dp_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e){dp = sender as DockPanel;dp.Background = System.Windows.Media.Brushes.Transparent;}

剩下的工作就是怎样去显示  和  显示出比较炫的效果了。

先说说显示,显示主要就在PersonView.xaml文件里面,这是一个UserControl;

这个很简单 首先在PersonView.xaml里面用一个Grid,里面再放一个ScrollViewer再加上我们的  StackPanel就大功告成了!

代码如下:

<UserControl x:Class="WpfApplication2.PersonView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" Background="Black"d:DesignHeight="300" d:DesignWidth="250"Loaded="UserControl_Loaded"><Grid Name="gd"><ScrollViewer Name="sv" Width="250" Height="300"  VerticalScrollBarVisibility="Auto"><StackPanel Name="sp"></StackPanel></ScrollViewer></Grid>
</UserControl>

PersonView.xaml.cs文件代码:

private void UserControl_Loaded(object sender, RoutedEventArgs e){List<GroupPerson> gps = GetListGroup();GroupListCreate glc = new GroupListCreate();sp = glc.CreateModuleEntry(gps);sv.Content = sp;}

关于GetListGroup  我就不写了这个就是根据我们定义的数据模型去给初始化一下。

数据模型和Style我就不贴了   数据模型看我创建的列表就能看出来,  Style代码实在太多。

需要完整代码的朋友请加群

C#/WPF技术交流群: 94234450

点击加入QQ群:

不管你遇到了什么问题,我们都不会让你独自去面对!

转载于:https://www.cnblogs.com/BeiJing-Net-DaiDai/p/3934940.html

WPF制作QQ列表(仿qq列表特效)相关推荐

  1. WPF C#截图功能 仿qq截图

    先上效果图 源码下载地址:http://download.csdn.net/detail/candyvoice/9788099 描述:启动程序,点击窗口button,开始截图,鼠标左键按下拖动,选中任 ...

  2. java仿qq_「java qq」仿QQ聊天软件java实现(一) - seo实验室

    java qq 之前学java通信的时候写过简单的通信程序,但比较简陋,于是重新写了一个仿照QQ的聊天软件,主要在界面上做了优化,增加了一些功能.实现的功能有注册.登录.好友列表.分组.黑名单.添加好 ...

  3. java仿qq gui_Java仿QQ登入页面

    1.[代码][Java]代码 package com.myqq.frame; import java.awt.BorderLayout; import java.awt.Color; import j ...

  4. android qq apk,仿QQ获取手机中的APK并分享的实现

    前几天看到同事里有一个界面绚丽的应用,觉得有点意思,就让他把APK发给我,我想反编译看看里面的代码.结果,这哥们在手机里找了好一阵子,最后给我说:手机没有root,找不到APK文件在哪里.我再让他试试 ...

  5. WPF编程;上位机编程;C#编程;仿QQ基础实现(一)之界面预览

    简介 一.摘要 1.描述 2.关键字 二.什么是WPF 三.为什么选择WPF 四.仿QQ的登录界面 五.仿QQ联系人界面 六.源码下载 七.其他 八.参考 一.摘要 1.描述 本文主要描述的是如何通过 ...

  6. 仿QQ聊天软件(登录界面、好友界面、聊天界面)-Java(Swing、Socket)

    文章目录 一.项目结构 二.项目功能 三.制作界面 (一).登录界面的制作 (二).好友列表界面 (三).聊天界面 四.制作服务器 五.设计通信协议 六.项目缺点 学习了socket通信后,就想来制作 ...

  7. 仿QQ聊天程序(java)

    仿QQ聊天程序(java) 2014年03月17日 15:52:47 标签: java / 聊天 / 仿QQ 90246 仿QQ聊天程序 转载出处: https://blog.csdn.net/u01 ...

  8. iOS之仿QQ好友列表展开收缩效果的实现

    使用UICollectionView实现 思路 很明显整体它是一个列表,它的分组是一个列表,它里面的好友列表也是一个列表,所以就可以使用组头来设置分组列表,使用cell设置好友列表: 当点击组头的时候 ...

  9. html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

    JS仿QQ好友列表展开.收缩功能(第一篇) 发布时间:2020-10-17 14:20:03 来源:脚本之家 阅读:96 作者:erdouzhang 效果图如下所示: html: 我的好友 张三 李四 ...

  10. 仿 手机QQ 登录、注册、找回密码、好友列表、QQ状态等功能的实现

    仿 手机QQ 登录.注册.找回密码.好友列表.QQ状态等功能的实现 全文 图 + 代码 .... 福利!!!(QQ登录背景,过度页面背景) 1.加载过程中的背景 2.登录页面 ==1. 登录页面 布局 ...

最新文章

  1. MySQL-BETWEEN AND范围查询问题
  2. [原创]修改oracle 数据库默认时间格式
  3. DevOps工程师到底是做什么的?
  4. python画气泡图_​用Python把图做的好看点:用Matplotlib画个好看的气泡图
  5. win10,配置环境变量时系统环境变量和用户环境变量的优先级
  6. 12c oracle 修改内存_还在等12.2吗?Oracle 12c后这个观念要改改!
  7. 网络聊天室的技术与发展
  8. 中小微企业公共信用数据的风险评估
  9. NP、OSPF链路状态数据库
  10. html打开本地excel文件夹,html使用excel表格数据库-html读取本地excel文件并展示
  11. CF1041B Buying a TV Set
  12. Unity3D开发学习
  13. python安装包错误的问题
  14. 在固态硬盘上安装linux系统怎么安装,教程|教你一键重装怎么将系统安装在固态硬盘上...
  15. 服务器提供各种服务 包括文件服务器,服务器提供各种服务,包括文件服务器、邮件服务器、Web服务器等。...
  16. python建模_python建模实例详解
  17. 怎么快速把wmv视频格式转换成mp4视频
  18. 计算机专业论文评语,计算机毕业论文评语
  19. GHO是什么文件 与ISO镜像文件有什么不同
  20. 【jdk1.8特性】之Optional

热门文章

  1. 两年前,梦开始的地方.
  2. Fedora7安装后的配置
  3. 制定Windows重要安全计划——12步纲要
  4. python中open打开路径问题_Python学习笔记之open()函数打开文件路径报错问题
  5. mysql源码安装linux,Linux下mysql源码安装笔记
  6. matlab 数值积分 截断误差,几种数值积分算法误差分析(10页)-原创力文档
  7. python去重命令_关于python去重操作的实例与算法原理演示 2020-12-05
  8. STL---栈和队列
  9. mt4 指标 涨跌幅 颜色k线_通达信K线波段操盘指标公式
  10. 可变车道怎么走不违章_还记得这种车道怎么走吗?