WPF实现消息中心

↑↑↑点击上方蓝字关注我

一、概要

本文将讲解基于WPF实现一个消息中心的功能,比如常见的软件当中会经常收到服务端推送的“新闻”、“公告”等消息。这个时候就需要对这个需求进行分析了。

功能分析如下:

•消息内容显示。•消息管理增、删、批量删除。•消息分类(通知类消息、交互类型消息例如可跳转到某个连接或程序内的模块)•消息处理(接受、删除、忽略)

二、实现

1.消息内容显示

这里考虑自定义的控件为Listbox,消息本身是一个多项的内容且需要操作每一项。

  <ListBoxGrid.Row="1"MaxHeight="335"Background="{x:Null}"BorderThickness="0"ItemContainerStyle="{DynamicResource ListBoxItemStyle}"ItemsSource="{Binding MessageItem}"ScrollViewer.HorizontalScrollBarVisibility="Hidden"><ListBox.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel Orientation="Vertical" /></ItemsPanelTemplate></ListBox.ItemsPanel><ListBox.ItemTemplate><DataTemplate DataType="{x:Type localModel:MessageItemModel}"><BorderHeight="30"BorderBrush="#FFBDBDBD"BorderThickness="0,0,0,0.6"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="1*" /><ColumnDefinition Width="40" /></Grid.ColumnDefinitions><DockPanel><LabelMaxWidth="70"Content="{Binding Path=Name}"Foreground="Red"ToolTip="{Binding Path=Name}" /><LabelMaxWidth="130"Content="{Binding Path=Content}"Foreground="White"ToolTip="{Binding Path=Content}" /></DockPanel><CheckBoxGrid.Column="1"FlowDirection="RightToLeft"IsChecked="{Binding Path=CheckBoxState}" /></Grid></Border></DataTemplate></ListBox.ItemTemplate>
</ListBox>

2.消息管理增、删、批量删除

主要容器定下来之后那么接下来每一项消息就是自定义ListboxItem即可,针对每一条消息要有具体的处理。

例如:

1.

通知类消息,只需要确定按钮。

2.

交互类型消息,需要确认、删除、忽略

 <DataTemplate x:Key="SelectedTemplate" DataType="{x:Type localModel:MessageItemModel}"><Border BorderBrush="#FFBDBDBD" BorderThickness="0,0,0,0.6"><StackPanel><TextBoxMaxWidth="240"MaxHeight="200"Padding="0,5,0,0"HorizontalAlignment="Center"VerticalAlignment="Center"Background="Transparent"BorderThickness="0"FontSize="14"Foreground="White"IsReadOnly="True"Text="{Binding Path=Content}"TextAlignment="Center"TextWrapping="WrapWithOverflow"ToolTip="{Binding Path=Content}"VerticalScrollBarVisibility="Auto" /><StackPanelMargin="5,5,5,9"HorizontalAlignment="Center"VerticalAlignment="Center"Orientation="Horizontal"><ButtonWidth="60"Height="25"Margin="5"Command="{Binding DataContext.ClickAcceptCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"CommandParameter="{Binding}"Content="接受"Style="{StaticResource BlueButtonStyle}"Visibility="{Binding Path=InvitationType, Converter={StaticResource BooleanToVisibilityConverter}}" /><ButtonWidth="60"Height="25"Margin="5"Command="{Binding DataContext.ClickRefuseCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"CommandParameter="{Binding}"Content="忽略"Style="{StaticResource BlueButtonStyle}"Visibility="{Binding Path=InvitationType, Converter={StaticResource BooleanToVisibilityConverter}}" /><ButtonWidth="60"Height="25"Margin="5"Command="{Binding DataContext.ClickAgreeCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"CommandParameter="{Binding}"Content="确认"Style="{StaticResource BlueButtonStyle}"Visibility="{Binding Path=NoticeType, Converter={StaticResource BooleanToVisibilityConverter}}" /></StackPanel></StackPanel></Border></DataTemplate>

3.消息分类

这里就是在Model层定义好具体的枚举即可。

/// <summary>
/// 消息处理结果
/// </summary>
public enum SysMessageResult
{/// <summary>/// 未处理/// </summary>Unhandled = 0,/// <summary>/// 同意/// </summary>Processed = 1
}/// <summary>
/// 消息类型
/// </summary>
public enum SysMessageType
{/// <summary>/// 通知类型/// </summary>NoticeType = 0,/// <summary>/// 其他类型/// </summary>OtherType = 1
}

4.消息处理

消息处理指的是,“确定”、“接受”、“忽略”这三个按钮对消息内容处理的逻辑,如果小伙伴需要可根据自己的需要修改。我这里定义如下:

•确定:通常处理通知消息,处理仅仅是从消息列表中移除该项不做其他行为。•接受:是处理交互类型的按钮,处理从消息列表中移除该项且触发其他业务处理行为。•忽略:处理所有类型消息,只是不显示在UI中但还会存在于消息列表中下次或空闲时间处理消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学Android的学习规划

为什么80%的码农都做不了架构师&#xff1f;>>> 客观地讲&#xff0c;会分为两条线来处理 学术线&#xff1a; 从学术上讲&#xff0c;Android分为几个模块是需要我循序渐进的&#xff1a; 初印象&#xff1a;IDE中Android各项结构 初印象&#xff1a;Android结…

每日一笑 | IE的反射弧也太长了吧......

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

WPF 用Popup做下拉菜单

今天无聊时看到必应搜索首页的菜单挺好&#xff0c;于是想着模仿一下。。写着写着发现和我之前做的一个MenuItem很像&#xff0c;干脆直接拿来用了。。。看看效果&#xff1a;上图是bing.com首页右上角的下拉菜单&#xff0c;今天就来做了一个这样的。。我承认我偷懒了&#xf…

程序猿都在关注的6个优质公众号

CSDN学院▲长按图片识别二维码关注简介&#xff1a;CSDN学院&#xff0c;中国IT人必备的职业提升平台。在这里&#xff0c;看前辈文章&#xff0c;听专家分享&#xff0c;做一线项目&#xff0c;无畏场景&#xff0c;不限时间的紧跟前沿技术脚步。你的技术进阶之路&#xff0c;…

聊一聊.NET Core结合Nacos实现配置加解密

背景 当我们把应用的配置都放到配置中心后&#xff0c;很多人会想到这样一个问题&#xff0c;配置里面有敏感的信息要怎么处理呢&#xff1f;信息既然敏感的话&#xff0c;那么加个密就好了嘛&#xff0c;相信大部分人的第一感觉都是这个&#xff0c;确实这个是最简单也是最合适…

给孩子讲100个科学道理,不如带他做这些趣味实验!

▲数据汪特别推荐点击上图进入玩酷屋玩具和学习看似是两个对立的东西&#xff0c;孩子天性爱玩&#xff0c;家长却希望孩子能多学习。不一定非要啃课本才能汲取知识&#xff0c;有时候&#xff0c;在轻松有趣的游戏中也能学到课堂上学不到的知识。让学习变得有趣、高效——给孩…

linux服务器出现黄,linux服务器出现严重故障后的原因以及解决方法

linux服务器出现严重故障后的原因以及解决方法发布时间&#xff1a;2011-11-24 16:32:18 作者&#xff1a;佚名 我要评论linux服务器出现严重故障后的解决方法&#xff0c;本文为大家介绍四个步骤解决linux服务器严重故障。1、把系统安装光盘插入&#xff0c;重启机器&…

史上最污技术解读,我竟然秒懂了!

全世界只有3.14 % 的人关注了数据与算法之美或许有不少人对热备&#xff0c;冷备&#xff0c;云备了解不深。今天&#xff0c;数据汪就给大伙科普一下 IT 行业各种备份术语&#xff0c;以后别闹笑话了。1.冷备份假设你是一位女性&#xff0c;你有一位男朋友&#xff0c;于此同时…

linux免费日志分析工具,分享10个优秀的日志分析工具

原标题&#xff1a;分享10个优秀的日志分析工具在网络管理员的日常工作中&#xff0c;对日志文件的分析能够及时了解网络设备或应用的性能数据&#xff0c;以便及时发现问题并及时解决。分析日志文件的时候需要运用到日志分析工具&#xff0c;接下来小编就给大家分享10个优秀的…

BenchmarkDotNet性能测试

BenchmarkDotNet是一款开源的性能测试工具&#xff0c;使用方式非常简单&#xff0c;特别是对实现同一功能的两种方式&#xff0c;犹豫不决时&#xff0c;可以使用它进行个对比。比如我们比较ADO.NET方式查询数据库表&#xff0c;和用Dapper方式获取数据为表&#xff0c;只需要…

每日一笑 | 程序员的日常,这也太真实了......

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

【转载】分布式系统的理解

2019独角兽企业重金招聘Python工程师标准>>> 1. 如何理解“分布式”&#xff1f; 经常听到”分布式系统“&#xff0c;”分布式计算“&#xff0c;”分布式算法“。分布式的具体含义是什么&#xff1f;狭义的分布是指&#xff0c;指多台PC在地理位置上分布在不同的…

小米开招.NET,20~40k*16薪,点名要求WPF+自动化!

近期小米发布了深圳南山区的C#工程师招聘岗位&#xff0c;20~40k*14薪的待遇让人心动&#xff0c;其核心技术要求再WPF、MVVM、自动化设备、本地数据库等&#xff0c;有没有发现什么秘密&#xff1f;互联网造车&#xff01;物联网终极形态自今年3月份小米宣布要造车&#xff0c…

linux内核线程socket,从Linux源码看Socket(TCP)的accept

从Linux源码看Socket(TCP)的accept前言笔者一直以为若是能知道从应用到框架再到操做系统的每一处代码&#xff0c;是一件Exciting的事情。 今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底作了哪些事情(基于Linux 3.10内核)。html一个最简单的Server端…

豆瓣最高评分8.9!让你拥有“多样性思维”

▲数据汪特别推荐点击上图进入玩酷屋01表象与本质我们的大脑是如何工作的&#xff1f;所谓的类比到底是什么?我们是怎么在截然不同的情景间建立起联系的&#xff1f;类比在学习的过程中发挥着怎样的作用&#xff1f;人类大脑中的每个概念都源于多年来不知不觉中形成的一长串类…

复仇!3:1 KO叙利亚!.NET程序员用算法推演出国足进世界杯概率...

6月16日凌晨2点&#xff0c;国足在阿联酋沙迦体育场迎战卡塔尔世预赛亚洲区40强赛最后一个对手&#xff0c;已经锁定小组头名并出线的劲敌叙利亚队&#xff0c;上半场艾克森中框&#xff0c;武磊送助攻&#xff0c;张稀哲打破僵局&#xff0c;下半场奥斯曼扳平比分&#xff0c;…

linux终端背景透明度设置,Ubuntu Terminal标签背景颜色设置

使用ubuntu以来一直苦于terminal标签颜色差距太小&#xff0c;有时候根本不知道自己在哪个标签下&#xff0c;于是在网上搜索如何设置背景颜色可以让标签便于区分&#xff0c;现总结如下&#xff1a;1.打开gtk-widgets.cssvim /usr/share/themes/Ambiance/gtk-3.0/gtk-widgets.…

快速入门人工智能,这波福利不能错过!

不知不觉&#xff0c;寒假就这样溜走了&#xff0c;看着这个寒假养肥的膘&#xff0c;嗯~又是一个充实的假期。不少同学踏上返校之路&#xff0c;迎来新学期&#xff01;新学期&#xff0c;当然少不了小天的陪伴啦&#xff01;早春开学季&#xff0c;小天送福利&#xff0c;福利…

从代码角度揭示:华为鸿蒙的“套壳”真相!

华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;出来后&#xff0c;互联网上已经吵翻天了&#xff0c;有人认为HarmonyOS是“自主的全场景分布式系统”&#xff0c;是国产之光&#xff0c;另一派则认为HarmonyOS是“Android套壳”&#xff0c;是挂羊头卖狗肉。作为十年老程…

linux进化树分析的软件,一款好用的进化树可视化编辑软件

原标题&#xff1a;一款好用的进化树可视化编辑软件iTOL(Interactive Tree Of Life)是一个在线显示和操作的进化树工具。我们可以添加很多自定义的项目&#xff0c;丰富和完善自己的进化树&#xff0c;比如添加柱状图、蛋白结构域、heatmap、基因平行转移(horizontal gene tran…