将contextmenustrip项目垂直居中的文本与手动设置的高度对齐

时间:2011-06-15 09:53:28

标签: c# contextmenustrip text-alignment

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

我尝试了以下内容:

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

并创建一个新的customeRender类:

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

然而,这对我不起作用。文本垂直保留在项目的顶部。 添加到其中一个项目的图像会居中,而箭头则更多。

任何帮助都会很棒。 艾

2 个答案:

答案 0 :(得分:1)

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

var b = new ToolStripButton("Hello");
b.TextAlign = ContentAlignment.MiddleCenter;
contextMenuStrip1.Items.Add(b);

答案 1 :(得分:0)

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

  @override
  void initState() {
    super.initState();
    final dataRepository = Provider.of<DataRepository>(context, listen: false);
    _endpointsData = dataRepository.getAllEndpointsCachedData();

    _updateData();
  }

结果

Aligning the text in the center vertically of a contextmenustrip item with manually set height