我正在Visual Studio 9中创建一个.NET表单应用程序。在设计器中我添加了一个MenuStrip到我添加了ToolStripMenuItems(标准下拉菜单)的位置。对于ToolStripMenuItems,我通过设置Image属性添加了图像。
图像按预期显示,但它们与左侧对齐,即使ImageAlign属性设置为MiddleCenter。将ImageAlign更改为任何值似乎对图像的对齐没有任何影响。
我想要的是让图像在下拉菜单左侧的“图像列”中间对齐。 ImageAlign属性不应该这样做吗?
答案 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)
我之前遇到过这种情况。 ImageAlign
,TextAlign
和TextImageRelation
属性似乎对这些控件没有任何作用。我最终不得不重新制作相同尺寸的所有图像,以背景为中心,我希望它们看起来如何。