Проблема со свойством .NET ToolStripMenuItem ImageAlign - PullRequest
0 голосов
/ 30 марта 2010

Я создаю приложение формы .NET в Visual Studio 9. В конструкторе я добавил MenuStrip, куда я добавил ToolStripMenuItems (стандартное раскрывающееся меню). К ToolStripMenuItems я добавил изображения, установив свойство Image.

Изображения выглядят как положено, за исключением того, что они выровнены по левому краю, даже если для свойства ImageAlign установлено значение MiddleCenter. Изменение ImageAlign на любое значение, похоже, не влияет на выравнивание изображения.

Я хочу, чтобы изображение было выровнено по центру «столбца изображения» в левой части раскрывающегося меню. Разве свойство ImageAlign не должно этого делать?

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

Этот код работает:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        menuStrip1.Renderer = new MyRenderer();
    }
    private class MyRenderer : ToolStripProfessionalRenderer {
        protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) {
            Console.WriteLine("{0}: {1} <= {2}", e.Item.Name, e.ImageRectangle, e.Image.Size);
            if (e.Item is ToolStripMenuItem) {
                int x = e.ImageRectangle.Left + 20 - e.Image.Width;
                e.Graphics.DrawImage(e.Image, new Point(x, 0));
            }
            else base.OnRenderItemImage(e);
        }
    }
}

Конечная проблема заключается в том, что расположение пункта меню рассчитано и внутренне. Вы не можете узнать, где заканчивается изображение и начинается текст. К сожалению, OnRenderItemImage () вызывается без намека на ширину области изображения. Немного дизайнерского дурака там.

1 голос
/ 30 марта 2010

Я сталкивался с этим раньше. Свойства ImageAlign, TextAlign и TextImageRelation, похоже, ничего не делают для этих элементов управления. В итоге мне пришлось переделывать все изображения одинакового размера, по центру фона, как я хотел, чтобы они выглядели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...