3

首先,简要概述一下我当前的 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();
        }
    }
}
4

1 回答 1

3

我对这个问题的解决方案是完全避免使用正常的菜单控制包含系统,而是让菜单显示一个FlowLayoutPanel包含我的菜单项的菜单。

这涉及必须添加一些不同的技巧以使面板与 UI 表现得很好。这种方法的额外优势是对系统的灵活性和控制力更高。

不利的一面是,当我有大量子项目时,我注意到性能下降,但我将单独调查。

于 2015-01-03T16:22:03.517 回答