2010-03-30 52 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