2012-05-21 77 views
1

我試圖阻止MenuStrip控件受到視覺樣式的影響。禁用ToolStripDropDownMenu的視覺樣式

所以我創建簡單的表格簡單的菜單條和殘疾人的視覺風格在Main()

// Application.EnableVisualStyles(); <-- no visual styles 
Application.SetCompatibleTextRenderingDefault(false); 
Application.Run(new Form1()); 

這將產生這個樣子(注意灰色的邊框和背景):

enter image description here

現在我想以這種形式的其他控件受到視覺樣式影響的方式來做同樣的事情(我只想禁用這個下拉式樣的視覺樣式)。

所以起初我試圖禁用每ToolStripMenuItemDropDown的視覺樣式,但它不起作用。然後我試圖禁用整個MenuStrip的視覺樣式,但都沒有工作。

這裏是我的自定義的代碼的MenuStrip:

class MPMenuStrip : MenuStrip 
{ 
    [DllImportAttribute("uxtheme.dll")] 
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist); 

    protected override void OnHandleCreated(EventArgs e) 
    { 
     // first attempt: 
     foreach (ToolStripMenuItem menuItem in this.Items) 
      SetWindowTheme(menuItem.DropDown.Handle, "", ""); 

     // second attempt: 
     SetWindowTheme(this.Handle, "", ""); 
     base.OnHandleCreated(e); 
    } 
} 

儘管使用自定義MenuStrip控制的,當Main()Application.EnableVisualStyles();被調用的,形式的外觀如下(藍色):

enter image description here

任何想法還有什麼可能影響此下拉菜單的外觀?
我錯過了什麼?

謝謝。

回答

1

您錯過了MenuStrip根本不是原生Windows控件,因此不直接受視覺樣式主題的影響。所有的渲染都是由.NET代碼完成的。這樣做的基類是ToolStripRenderer,提供了兩個提供的實現:ToolStripProfessionalRenderer和ToolStripSystemRenderer。後者試圖模擬操作系統的外觀,你可以通過將MenuStrip的RenderMode設置爲「System」來獲得它。仿真在Windows 7等後期操作系統上如此嚴重錯誤。

如果您想要真正的操作系統外觀,請改用MainMenu。與MenuStrip相比,它有一些限制。如果你想改變顏色,那麼你可以實現你自己的渲染器並修改它的顏色表。如this answer所示。

+0

謝謝,這就是我一直在尋找的。現在一切都變得完美了:) – LihO