ToolStripMenuItem更大的垂直填充,或者在更大的ToolStripMenuItem中垂直居中文本

时间:2011-06-01 17:01:04

标签: c# winforms menu padding toolstripmenu

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

我还尝试为 ToolStripMenuItem 设置更大的高度,但是,即使 TextAlign ,文本总是在顶部对齐em> property是 MiddleCenter 。它应垂直对齐中心!

我为不同的属性尝试了不同的设置,没有任何效果。我的想法是,我无法让 ToolStripMenuItem 在其文本周围留出更多空间,包括顶部和底部。

我正在使用C#,Windows Forms,Net 2.0,Visual Studio 2010 Express,Windows 7。

3 个答案:

答案 0 :(得分:2)

使用Margin代替Padding可以获得相同的效果,这将使Text的{​​{1}}保持一致。

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

答案 1 :(得分:2)

除了InBetween的答案,您还可以使用自定义渲染器并调整其“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);
        }
    }

答案 2 :(得分:1)

添加新行可以完成这项工作。

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

在添加小触摸屏支持时效果很好。

this.configToolStripMenuItem.Text = "\r\nSettings";