ContextMenuEx 内容菜单控件
ContextMenuEx 是一个功能丰富的内容菜单控件,支持多级菜单、图标、快捷键、分割线、主题适配、圆角边框和弹出动画效果。
功能特性
- 智能位置:默认在控件下方弹出,自动检测屏幕边界并调整位置
- 多级菜单:支持一级、二级菜单(更多层级通过递归实现)
- 图标支持:支持图片图标(优先级高)和 SVG 图标
- 快捷键显示:支持在菜单项右侧显示快捷键或说明文本(灰色)
- 分割线:支持菜单项之间的分割线
- 子菜单箭头:有子菜单的项自动显示箭头指示
- 主题适配:支持亮色/暗色主题切换,实现 IThemeable 接口
- 圆角边框:支持自定义菜单圆角半径
- 弹出动画:柔和淡入动画效果(可禁用)
- 边界保护:自动调整位置防止菜单超出屏幕边界
- 行号标识:菜单项支持 RowIndex 用于识别和排序
- 不抢夺焦点:菜单弹出时不获取焦点,不会导致父窗体失去焦点
快速开始
最简单的使用示例
// 创建菜单
var contextMenu = new ContextMenuEx();
// 添加菜单项
contextMenu.Items.AddItem("新建", "file-add", "new");
contextMenu.Items.AddItem("打开", "folder-open", "open");
contextMenu.Items.AddSeparator();
contextMenu.Items.AddItem("保存", "save", "save").Shortcut = "Ctrl+S";
contextMenu.Items.AddItem("另存为...", "save-as", "saveas");
// 绑定点击事件
contextMenu.ItemClick += (s, e) =>
{
MessageBox.Show($"点击了: {e.Item.Text} (Name: {e.Item.Name})");
};
// 在按钮点击时显示菜单
private void btnMenu_Click(object sender, EventArgs e)
{
contextMenu.Show(btnMenu);
}