C# &引用;Pin";控制ToolstripMenu中的项

C# &引用;Pin";控制ToolstripMenu中的项,c#,winforms,toolstripdropdown,toolstripitem,C#,Winforms,Toolstripdropdown,Toolstripitem,首先,简要介绍一下我当前的UI外观: 请注意,除了ToolStripControlHost中的内容之外,其他所有内容都是标准WinForms 简而言之,我希望有一些类似于ToolStripControlHost的东西,但我需要将它“固定”到菜单的底部,这样当有很多项时,它就不会像其他菜单项一样滚动 经过一番搜索,我得出结论,也许定制绘画可能是解决方案,但我不知道是否是这样 下面是一些示例代码,但我不确定它有多有用: public ToolStripDropDownButtonContainer

首先,简要介绍一下我当前的UI外观:

请注意,除了ToolStripControlHost中的内容之外,其他所有内容都是标准WinForms

简而言之,我希望有一些类似于ToolStripControlHost的东西,但我需要将它“固定”到菜单的底部,这样当有很多项时,它就不会像其他菜单项一样滚动

经过一番搜索,我得出结论,也许定制绘画可能是解决方案,但我不知道是否是这样

下面是一些示例代码,但我不确定它有多有用:

public ToolStripDropDownButtonContainer(ToolStripDropDownButton button)
{
    this.UIControl = button.GetCurrentParent();
    this.Button = button;

    if (this.Button.Tag == null)
    {
        this.Button.Tag = true;

        this.Button.DropDownDirection = ToolStripDropDownDirection.AboveLeft;
        ToolStripDropDownMenu menu = (ToolStripDropDownMenu)this.Button.DropDown;

        menu.SuspendLayout();
        try
        {
            menu.BackColor = Color.White;
            menu.ShowImageMargin = false;
            menu.ShowCheckMargin = false;
            menu.AutoSize = true;
            menu.Margin = Padding.Empty;
            menu.Padding = Padding.Empty;
            menu.GripMargin = Padding.Empty;
            menu.GripStyle = ToolStripGripStyle.Hidden;
            menu.MinimumSize = new Size(310, 0);
            menu.MaximumSize = menu.MinimumSize;
            // TODO pin panel (or some control) to the bottom-side of the menu
        }
        finally
        {
            menu.ResumeLayout();
        }
    }
}

我解决这个问题的方法是完全避免使用普通的菜单控制包含系统,而是让菜单显示一个
FlowLayoutPanel
,其中包含我的菜单项

这涉及到必须添加一些技巧,以使面板与UI配合良好。这种方法的附加优点是对系统的灵活性和控制能力更强


在缺点方面,当我有一吨子项时,我注意到性能下降,但我将单独对此进行调查。

我是否理解正确:弹出窗口中有两个“区域”:3-4项滚动的顶部和一个锚定到底部?我不知道锚定控件是什么,但您是否尝试过嵌套ToolStripControlHosts?你在另一个里面有一个,它有两个东西:滚动器和非滚动器?是的,我最后做了类似的事情。