我想创建一个包含多个列的上下文菜单。基本上它会是这样的:
First item | [common option] | All Options >
Second item | [common option] | All Options >
Third item | [common option] | All Options >
Fourth item | [common option] | All Options >
所以基本上有一堆项目(在运行时生成),每个项目都可以自己启动;或使用常用选项;或者你可以获得一个包含所有可能选项的子菜单。
我该怎么做?我试图滥用ContextMenuStrip
和ContextMenu
,但他们似乎没有任何此类选项。我似乎还记得在某处看过多列菜单......
我更喜欢Windows Forms解决方案,因为我没有任何WPF体验。哦,当点击通知区域(又名系统托盘)中的图标时,将打开此上下文菜单。
答案 0 :(得分:5)
我不知道ContextMenuStrip
,这是一个完全用.NET代码构建的菜单,但你绝对可以用ContextMenu
来做,这是本机系统菜单的包装。 / p>
关键是为各个菜单项设置MFT_MENUBREAK
或MFT_MENUBARBREAK
标志,这些标志在MenuItem
class包装器中显示为属性:MenuItem.Break
和{分别为{3}}。
前者只是将菜单项放在一个新列中,而后者将该项放入一个新列中,并将该列与蚀刻的垂直线分开。
来自MSDN示例:
public void CreateMyMenus()
{
// Create three top-level menu items.
MenuItem menuItem1 = new MenuItem("&File");
MenuItem menuItem2 = new MenuItem("&New");
MenuItem menuItem3 = new MenuItem("&Open");
// Set the BarBreak property to display horizontally.
menuItem2.BarBreak = true;
menuItem3.BarBreak = true;
// Add menuItem2 and menuItem3 to the menuItem1's list of menu items.
menuItem1.MenuItems.Add(menuItem2);
menuItem1.MenuItems.Add(menuItem3);
}
答案 1 :(得分:0)
WinForms中的菜单只能像树一样构建:每个项目下都可以有一个子菜单。因此,您可以将公共选项作为子菜单的第一项。
除非你设计自己的控件(然后WPF更适合这个任务,但WPF需要花费大量时间来学习),它看起来不会有任何不同。