.NET ToolStripMenuItem ImageAlign属性的问题

时间:2010-03-30 15:14:54

标签: .net winforms formatting

我正在Visual Studio 9中创建一个.NET表单应用程序。在设计器中我添加了一个MenuStrip到我添加了ToolStripMenuItems(标准下拉菜单)的位置。对于ToolStripMenuItems,我通过设置Image属性添加了图像。

图像按预期显示,但它们与左侧对齐,即使ImageAlign属性设置为MiddleCenter。将ImageAlign更改为任何值似乎对图像的对齐没有任何影响。

我想要的是让图像在下拉菜单左侧的“图像列”中间对齐。 ImageAlign属性不应该这样做吗?

2 个答案:

答案 0 :(得分:2)

此代码排序有效:

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 :(得分:1)

我之前遇到过这种情况。 ImageAlignTextAlignTextImageRelation属性似乎对这些控件没有任何作用。我最终不得不重新制作相同尺寸的所有图像,以背景为中心,我希望它们看起来如何。