2010-03-30 56 views
0

我在Visual Studio 9中创建.NET窗体应用程序。在设计器中,我添加了一个MenuStrip,添加了ToolStripMenuItems(标准下拉菜单)。通过设置Image属性添加图像到ToolStripMenuItems。.NET ToolStripMenuItem问题ImageAlign属性

图像按预期显示,但它们与左侧对齐,即使ImageAlign标注设置为MiddleCenter。将ImageAlign更改为任何值似乎都不会影响图像的对齐。

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

+0

这是在WinForms或WPF中? – 2010-03-30 15:19:53

+0

它是WinForms。 – Oberon 2010-03-30 15:30:34

回答

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()可悲地被称为没有任何提示图像区域有多宽。那里设计的一点点。

+0

@nobugz,您的解决方案适用于我,谢谢。尽管不像ImageAlign属性按我的预期那样容易。 – Oberon 2010-03-31 08:39:44

+0

@oberon,是的,尝试自定义ToolStrip类时会遇到很多问题。他们有一些设计缺陷并在他们真正完成之前发货。请通过标记回答来关闭你的线程。 – 2010-03-31 09:08:05

1

我以前遇到过这个问题。 ImageAlign,TextAlignTextImageRelation属性似乎没有对这些控件做任何事情。我最终不得不将所有图像重新制作成相同大小的图像,集中在背景中,我希望它们看起来如何。

+0

我曾考虑过相同的解决方案,但希望能够解决该问题。 – Oberon 2010-03-31 08:35:27