C# ToolStripMenuItem较大的垂直填充,或较大ToolStripMenuItem中的文本垂直居中

C# ToolStripMenuItem较大的垂直填充,或较大ToolStripMenuItem中的文本垂直居中,c#,winforms,menu,padding,toolstripmenu,C#,Winforms,Menu,Padding,Toolstripmenu,我试图在ContextMenuStrip中为ToolStripMenuItems设置更大的垂直填充。但是,更改Padding.Top属性会将Padding添加到底部,而不是顶部 我还尝试为ToolStripMenuItem设置更大的高度,它可以工作,但是,文本总是在顶部对齐,即使TextAlign属性是MiddleCenter。它应该与中心垂直对齐 我尝试了不同属性的不同设置,但没有效果。我的想法是,我无法让ToolStripMenuItem在文本周围有更多的空间,无论是从顶部还是底部 我正在使

我试图在ContextMenuStrip中为ToolStripMenuItems设置更大的垂直填充。但是,更改Padding.Top属性会将Padding添加到底部,而不是顶部

我还尝试为ToolStripMenuItem设置更大的高度,它可以工作,但是,文本总是在顶部对齐,即使TextAlign属性是MiddleCenter。它应该与中心垂直对齐

我尝试了不同属性的不同设置,但没有效果。我的想法是,我无法让ToolStripMenuItem在文本周围有更多的空间,无论是从顶部还是底部


我正在使用C#、Windows窗体、Net 2.0、Visual Studio 2010 Express、Windows 7。

您可以使用
边距
而不是
填充
来获得相同的效果,这将保持
ToolStripMenuItem的
文本
对齐


缺点是,在选择项目时,这不会修改高亮矩形的大小,因此如果高度增加很多,它可能看起来有点奇怪。

除了中间人的答案外,您还可以通过使用自定义渲染器并调整其“TextRectangle”属性来修复高亮矩形。这里有一些示例代码应该会有所帮助

    var itemHeight = 36;
    var verticalPadding = 36 - TextRenderer.MeasureText("A", _DisplayNameFont).Height / 2;
    menu.Renderer = new MyRenderer { VerticalPadding = verticalPadding };

    class MyRenderer : ToolStripSystemRenderer
    {
        public int VerticalPadding { get; set; }

        protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
        {
            if (null == e)
            { return; }
            e.TextFormat &= ~TextFormatFlags.HidePrefix;
            e.TextFormat |= TextFormatFlags.VerticalCenter;
            var rect = e.TextRectangle;
            rect.Offset(0, VerticalPadding);
            e.TextRectangle = rect;
            base.OnRenderItemText(e);
        }
    }

添加一个新行就可以了

这不是最好的解决方案,但这是一种快速添加填充物的方法

在添加对小型触摸屏的支持时效果良好

this.configToolStripMenuItem.Text = "\r\nSettings";
如果添加几行代码,可以调整ToolStripMenuItem渲染器的“TextRectangle”。有关详细信息,请参见下面的答案。