4

我正在尝试在手动设置高度为 60 的上下文菜单项中垂直对齐中心的文本。但是无论我尝试什么,文本始终位于顶部。同一项目中的图像将正确对齐,而无需我做任何事情。

我尝试了以下方法:

 foreach (ToolStripItem item in ContextMenuStrip1.Items)
        {
            item.AutoSize = false;
            item.Height = 60;
            item.Width = maxWidth;
            item.TextAlign = ContentAlignment.MiddleCenter;
        }

并创建一个新的 customerRender 类:

public sealed class CustomRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    {
        if (e.Item.IsOnDropDown)
        {
            e.TextFormat |= TextFormatFlags.VerticalCenter;
        }
        base.OnRenderItemText(e);
    }
}

但是,这对我不起作用。文本垂直保持在项目的顶部。添加到这些项目之一的图像居中,箭头表示更多。

任何帮助都会很棒。艾丹

4

2 回答 2

1

使用 ToolStripButton 而不是 ToolStripItem - 文本对齐似乎在此控件上工作正常

var b = new ToolStripButton("Hello");
b.TextAlign = ContentAlignment.MiddleCenter;
contextMenuStrip1.Items.Add(b);
于 2011-06-17T11:09:13.763 回答
1

我在自定义高度菜单项中垂直对齐文本时遇到了同样的问题,经过研究我发现增加菜单项高度不会增加代表绘制文本边界的文本矩形的高度。要解决此问题,请在自定义渲染中膨胀OnRenderItemText中的文本矩形。

Protected Overrides Sub OnRenderItemText(e As ToolStripItemTextRenderEventArgs)

    Dim r = e.TextRectangle
    r.Height = e.Item.Height - 4 '4 is the default differnce between the item height and the text rectangle height

    e.TextRectangle = r

    e.TextFormat = TextFormatFlags.VerticalCenter

    MyBase.OnRenderItemText(e)
End Sub

结果

使用手动设置的高度垂直对齐上下文菜单项中心的文本

于 2020-04-22T02:03:43.153 回答