2010-12-20 74 views
3

當我有一個父控件,其中有一個BackColor而不是SystemColors.Control,但我有那個父控件上的按鈕,我想在系統中繪製它們。但是,當我不更改按鈕的BackColor時,它會以父級的顏色繪製。當我將按鈕的BackColor更改爲SystemColors.Control時,它不再在Windows主題中繪製。防止繼承父母的BackColor的按鈕

alt text
左邊的版本是SystemColors.Control,右邊是不改變BackColor

alt text
炸燬,它看起來像這樣。在這裏你可以看到按鈕有一個堅實的背景。

任何建議如何解決這個問題?

圖像中的效果可以通過創建一個新的.NET 2.0 WinForms項目和改變Form1構造以下來完成:

public Form1() 
{ 
    InitializeComponent(); 

    var textBox = new TextBox(); 
    Controls.Add(textBox); 

    var button = new Button { Text = "L", Width = 23, Height = 18, Left = -1, Top = -1 }; 
    textBox.Controls.Add(button); 

    // Disable the line below to get the default behavior 
    button.BackColor = SystemColors.Control; 
} 
+0

我看不到,類似於按鈕上的控制顏色的正常漸變。讓它變大。 – 2010-12-20 13:21:00

+0

@Hans Passant - 你走了。 – 2010-12-20 13:28:50

回答

3

我unforuantely只有在此刻進入到Windows 7,我無法在XP等測試,但你打電話Application.EnableVisualStyles在你的WinForms應用程序的入口點Main

在啓用了Aero的Windows 7上,如果Application.EnableVisualStyles被調用,則按鈕不會呈現父級顏色。

注意:您應該設置button.UseVisualStyleBackColor = true;並且不明確設置按鈕的BackColor屬性。

+0

是的。屏幕截圖來自帶有基本主題的Windows 7(即無Aero)。我添加了一個代碼示例,它在新的乾淨的WinForms項目中重現了這種效果。 – 2010-12-20 13:24:00

+0

我在編輯後更新了我的答案。 – 2010-12-20 13:36:25

+0

我的英雄。謝謝。 – 2010-12-20 13:45:17