MessagePanel 是一个现代化的消息通知面板控件,支持消息筛选、已读/未读状态管理、删除确认等功能。适用于通知中心、消息列表、系统公告等场景。
一、示例效果




二、使用文档
MessagePanel 消息面板控件
控件名称
MessagePanel
中文名称
消息面板控件
控件优点
MessagePanel 是一个现代化的消息通知面板控件,支持消息筛选、已读/未读状态管理、删除确认等功能。适用于通知中心、消息列表、系统公告等场景。
主要特性
- 消息筛选:支持全部/未读两种筛选模式
- 已读/未读管理:未读消息显示红点标记,点击标题自动标记已读
- 删除确认:删除消息时弹出确认对话框,防止误删
- 鼠标滚轮滚动:支持鼠标滚轮滚动查看更多消息
- 悬停效果:消息项悬停时显示边框高亮和删除按钮悬停效果
- Tooltip提示:清空、关闭、删除按钮悬停显示提示文本
- 主题适配:支持亮色/暗色主题切换
- SVG图标:使用 SVG 图标管理器加载图标
重要参数说明
MessagePanel 控件属性
基本属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Messages |
List<MessageItem> | new List() | 消息列表数据 |
Filter |
MessageFilter | All | 筛选条件(全部/未读) |
HeaderHeight |
int | 48 | 标题栏高度 |
ItemSpacing |
int | 8 | 消息项间距 |
ItemPadding |
int | 15 | 消息项内边距 |
CornerRadius |
int | 8 | 圆角半径 |
BorderWidth |
int | 1 | 边框宽度 |
颜色属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
BorderColor |
Color | 45, 45, 48 | 边框颜色 |
HoverBorderColor |
Color | 80, 80, 88 | 悬停边框颜色 |
HeaderBgColor |
Color | 30, 30, 33 | 标题栏背景色 |
ItemBgColor |
Color | 35, 35, 38 | 消息项背景色 |
HoverBgColor |
Color | 45, 45, 48 | 悬停背景色 |
TextColor |
Color | 245, 245, 245 | 文本颜色 |
SubTextColor |
Color | 150, 150, 160 | 次要文本颜色 |
ButtonBgColor |
Color | 1, 139, 141 | 按钮背景色 |
ButtonHoverBgColor |
Color | 26, 164, 166 | 按钮悬停背景色 |
IconColor |
Color | 180, 180, 190 | 图标颜色 |
DangerColor |
Color | 255, 77, 79 | 危险色(删除/关闭悬停) |
主题属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
FollowGlobalTheme |
bool | true | 是否跟随全局主题 |
MessageItem 消息项属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Id |
string | 自动生成12位 | 消息唯一标识(自动生成) |
Title |
string | null | 消息标题 |
Content |
string | null | 消息内容(支持换行) |
Date |
DateTime? | null | 消息日期 |
IsRead |
bool | false | 是否已读 |
NoticeIcon |
string | "notification" | 通知图标名称 |
ButtonText |
string | "详情" | 跳转按钮文本 |
ButtonIcon |
string | "right" | 跳转按钮图标 |
ShowButton |
bool | true | 是否显示跳转按钮 |
TagColor |
Color | 255, 77, 79 | 未读红点颜色 |
MessageFilter 筛选枚举
| 值 | 说明 |
|---|---|
All |
显示全部消息 |
Unread |
仅显示未读消息 |
重要事件
| 事件名 | 参数类型 | 说明 |
|---|---|---|
TitleClicked |
MessageItem | 点击消息标题时触发 |
MessageDeleted |
MessageItem | 消息删除后触发 |
Cleared |
EventArgs | 清空全部消息时触发 |
Closed |
EventArgs | 点击关闭按钮时触发 |
使用示例
基本使用
csharp
using AntdUIEx.Controls.MessagePanel;
// 创建消息面板
MessagePanel messagePanel = new MessagePanel();
messagePanel.Size = new Size(400, 500);
messagePanel.Location = new Point(10, 10);
this.Controls.Add(messagePanel);
// 添加消息
messagePanel.Messages.Add(new MessageItem
{
Title = "系统通知",
Content = "您的账户已成功激活,欢迎使用系统。",
Date = DateTime.Now,
IsRead = false,
NoticeIcon = "notification"
});
添加多条消息
csharp
// 添加多条消息
messagePanel.Messages.AddRange(new MessageItem[]
{
new MessageItem
{
Title = "豆包大模型 2.1 已上线",
Content = "豆包已上线豆包大模型 2.1,Agent、代码交付、多模态能力全面增强。",
Date = DateTime.Now.AddDays(-1),
IsRead = false,
NoticeIcon = "notification"
},
new MessageItem
{
Title = "版本更新通知",
Content = "系统已更新至最新版本,请查看更新日志。",
Date = DateTime.Now.AddDays(-2),
IsRead = true,
NoticeIcon = "info"
},
new MessageItem
{
Title = "安全提醒",
Content = "检测到异常登录行为,请及时修改密码。",
Date = DateTime.Now.AddHours(-3),
IsRead = false,
NoticeIcon = "warning"
}
});
绑定事件
csharp
// 标题点击事件
messagePanel.TitleClicked += (sender, item) =>
{
MessageTip.ShowAtMouse($"点击标题:{item.Title}");
// item.IsRead 已自动设置为 true
};
// 消息删除事件
messagePanel.MessageDeleted += (sender, item) =>
{
MessageTip.ShowAtMouse($"已删除消息:{item.Title}");
};
// 清空事件
messagePanel.Cleared += (sender, e) =>
{
MessageTip.ShowAtMouse("已清空全部消息");
};
// 关闭事件
messagePanel.Closed += (sender, e) =>
{
MessageTip.ShowAtMouse("面板已关闭");
// 可以隐藏面板或执行其他操作
messagePanel.Visible = false;
};
切换筛选模式
csharp
// 显示全部消息
messagePanel.Filter = MessageFilter.All;
// 仅显示未读消息
messagePanel.Filter = MessageFilter.Unread;
自定义样式
csharp
// 自定义颜色
messagePanel.HeaderBgColor = Color.FromArgb(24, 144, 255);
messagePanel.ButtonBgColor = Color.FromArgb(24, 144, 255);
messagePanel.TextColor = Color.White;
messagePanel.BorderColor = Color.FromArgb(24, 144, 255);
// 自定义尺寸
messagePanel.HeaderHeight = 56;
messagePanel.ItemSpacing = 12;
messagePanel.ItemPadding = 20;
messagePanel.CornerRadius = 12;
自定义消息项
csharp
// 自定义消息项样式
messagePanel.Messages.Add(new MessageItem
{
Title = "自定义消息",
Content = "这是一条自定义样式的消息。",
Date = DateTime.Now,
IsRead = false,
NoticeIcon = "star", // 自定义图标
ButtonText = "查看详情", // 自定义按钮文本
ButtonIcon = "arrow-right", // 自定义按钮图标
ShowButton = true, // 显示按钮
TagColor = Color.FromArgb(255, 77, 79) // 自定义红点颜色
});
// 隐藏跳转按钮
messagePanel.Messages.Add(new MessageItem
{
Title = "无跳转按钮消息",
Content = "这条消息没有跳转按钮。",
Date = DateTime.Now,
IsRead = false,
ShowButton = false
});
主题适配
csharp
// 跟随全局主题(默认)
messagePanel.FollowGlobalTheme = true;
// 禁用主题跟随,使用自定义颜色
messagePanel.FollowGlobalTheme = false;
messagePanel.HeaderBgColor = Color.FromArgb(30, 30, 30);
messagePanel.ItemBgColor = Color.FromArgb(35, 35, 35);
删除消息
csharp
// 通过代码删除消息
string messageId = "ABC123XYZ456";
messagePanel.DeleteMessage(messageId);
// 清空全部消息
messagePanel.ClearMessages();
完整示例
csharp
public partial class NotificationForm : Form
{
private MessagePanel messagePanel;
public NotificationForm()
{
InitializeComponent();
InitializeMessagePanel();
}
private void InitializeMessagePanel()
{
messagePanel = new MessagePanel();
messagePanel.Size = new Size(380, 450);
messagePanel.Location = new Point(20, 20);
this.Controls.Add(messagePanel);
// 添加示例消息
messagePanel.Messages.AddRange(new MessageItem[]
{
new MessageItem
{
Title = "新功能发布",
Content = "系统新增数据导出功能,支持Excel、PDF等多种格式导出。",
Date = DateTime.Now.AddHours(-1),
IsRead = false,
NoticeIcon = "notification"
},
new MessageItem
{
Title = "账户安全提醒",
Content = "您的密码已超过90天未更新,建议及时修改以确保账户安全。",
Date = DateTime.Now.AddDays(-3),
IsRead = true,
NoticeIcon = "warning"
},
new MessageItem
{
Title = "系统维护通知",
Content = "系统将于本周六凌晨2:00-4:00进行例行维护,届时服务将暂停。",
Date = DateTime.Now.AddDays(-5),
IsRead = false,
NoticeIcon = "info"
}
});
// 绑定事件
messagePanel.TitleClicked += OnTitleClicked;
messagePanel.MessageDeleted += OnMessageDeleted;
messagePanel.Cleared += OnCleared;
messagePanel.Closed += OnClosed;
}
private void OnTitleClicked(object? sender, MessageItem item)
{
MessageTip.ShowAtMouse($"已查看:{item.Title}");
}
private void OnMessageDeleted(object? sender, MessageItem item)
{
MessageTip.ShowAtMouse($"已删除:{item.Title}");
}
private void OnCleared(object? sender, EventArgs e)
{
MessageTip.ShowAtMouse("已清空全部消息");
}
private void OnClosed(object? sender, EventArgs e)
{
messagePanel.Visible = false;
}
}
注意事项
- 消息ID:MessageItem 的 Id 属性会在首次访问时自动生成12位随机字符串,无需手动设置
- 已读状态:点击消息标题会自动将消息标记为已读,红点消失
- 删除确认:点击删除按钮会弹出确认对话框,确认后才会删除消息
- 滚动支持:当消息数量较多超出面板高度时,支持鼠标滚轮滚动
- 主题适配:默认跟随全局主题,可通过 FollowGlobalTheme 属性禁用
- SVG图标:NoticeIcon、ButtonIcon 等图标属性使用 SvgIconManager 管理的图标名称
- 设计时支持:在设计器中不会加载SVG图标,避免设计器异常
版本更新
2026-06-23
- 新增:MessagePanel 消息面板控件
- 新增:MessageItem 消息项数据类
- 新增:全部/未读筛选功能
- 新增:已读/未读红点标记
- 新增:删除确认对话框
- 新增:鼠标滚轮滚动支持
- 新增:Tooltip提示文本
- 新增:主题适配支持
- 新增:TitleClicked、MessageDeleted、Cleared、Closed 事件
三、后记说明
更多控件,敬请关注,如有需求、好的建议,请留言(xue5zhijing)
更多控件:更多:https://blog.csdn.net/uaime/article/details/161663833