C# 单击菜单C后,将面板作为ToolStrip菜单项打开#

C# 单击菜单C后,将面板作为ToolStrip菜单项打开#,c#,.net-4.0,panel,menuitem,C#,.net 4.0,Panel,Menuitem,Visual Studio Express 2013中有一个特殊的菜单项。 它看起来像是单击菜单项后打开的面板。例如: 如何为连接到MenuItem的MenuStrip创建这样的“面板菜单项”?它只是一个标准菜单项和标准隐藏面板,具有基于表单边框的动态位置?或者它是一个修改后的MenuItem来包含图形和Uri 我搜索了类似的内容,但我找不到如何在ToolStrip中创建面板,我不知道是否应该使用菜单创建一个普通的面板,或者在某个地方有一个解决方案(自定义组件)。假设使用WinForms,您可

Visual Studio Express 2013中有一个特殊的菜单项。
它看起来像是单击菜单项后打开的
面板。例如:

如何为连接到
MenuItem
MenuStrip
创建这样的“面板菜单项”?它只是一个标准
菜单项
和标准隐藏
面板
,具有基于
表单
边框的动态位置?或者它是一个修改后的
MenuItem
来包含图形和Uri


我搜索了类似的内容,但我找不到如何在
ToolStrip
中创建面板,我不知道是否应该使用菜单创建一个普通的
面板
,或者在某个地方有一个解决方案(自定义组件)。

假设使用WinForms,您可以使用ToolStripControlHost来保存面板或用户控件:

要在弹出窗口中显示的控件:

var panel = new Panel() {
  BackColor = Color.White,
  MinimumSize = new Size(150, 72),
  Size = MinimumSize,     
};
panel.Paint += (s, e) => {
  TextRenderer.DrawText(e.Graphics, "Pop-up Panel",
  SystemFonts.DefaultFont, panel.ClientRectangle,
  Color.Black, Color.Empty,
  TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
};
用于显示面板的ToolStrip控件:

  var hostTool = new ToolStripControlHost(panel) {
    Padding = Padding.Empty,
    Margin = Padding.Empty
  };

  var downButton = new ToolStripDropDownButton("Panel Menu") {
    Alignment = ToolStripItemAlignment.Right,
    DisplayStyle = ToolStripItemDisplayStyle.Text,
    DropDownDirection = ToolStripDropDownDirection.BelowLeft,
  };

  ((ToolStripDropDownMenu)downButton.DropDown).ShowCheckMargin = false;
  ((ToolStripDropDownMenu)downButton.DropDown).ShowImageMargin = false;
  downButton.DropDown.AutoSize = false;
  downButton.DropDown.Size = new Size(panel.Width + 12, panel.Height + 4);
  downButton.DropDown.Items.Add(hostTool);
  var tool = new ToolStrip();
  tool.Items.Add(downButton);
  this.Controls.Add(tool);
结果:


非常感谢,您的解决方案非常好。