Выравнивание текста по центру по вертикали элемента contextmenustrip с заданной вручную высотой

Я пытаюсь выровнять текст по центру по вертикали в элементе контекстного меню с вручную установленной высотой 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);
    }
}

Однако это не работает для меня. Текст остается вертикально вверху элемента. Изображение, добавленное к одному из этих элементов, центрируется, как и стрелка для большего.

Любая помощь будет здорово. Айдан


person AidanO    schedule 15.06.2011    source источник
comment
Я думаю, что у меня есть способ сделать это, опубликую (если сработает) на следующей неделе. Я собираюсь попробовать переопределить onpaint для ToolStripItem.   -  person AidanO    schedule 02.08.2011
comment
Это не сработало, или, по крайней мере, у меня это еще не сработало :(   -  person AidanO    schedule 12.08.2011
comment
Смотрите мой новый ответ   -  person Ahmed Osama    schedule 22.04.2020


Ответы (2)


Используйте ToolStripButton вместо ToolStripItem — выравнивание текста, похоже, отлично работает с этим элементом управления.

var b = new ToolStripButton("Hello");
b.TextAlign = ContentAlignment.MiddleCenter;
contextMenuStrip1.Items.Add(b);
person Peter Kelly    schedule 17.06.2011
comment
Я внедрил исправление, используя этот код, но внешний вид с использованием кнопки, а не элемента, отличается. Как и кликабельная область. Но +1 за то, что выравнивание заработало :) спасибо. - person AidanO; 17.06.2011
comment
Смотрите мой ответ, нет необходимости использовать ToolStripButton - person Ahmed Osama; 22.04.2020

У меня была такая же проблема с выравниванием текста по вертикали в элементах меню с пользовательской высотой, после исследования я обнаружил, что увеличение высоты элемента меню не приведет к увеличению высоты текстового прямоугольника, который представляет границы для рисования текста. Чтобы исправить это, раздуйте текстовый прямоугольник в 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

Результат

Выравнивание текста по центру элемента contextmenustrip по вертикали с заданной вручную высотой

person Ahmed Osama    schedule 22.04.2020