2013-04-16 51 views
2

我有一個沒有標題欄和邊框的WPF窗口。所以我想要改變基於它是否激活的窗口背景。WPF:如何將活動標題欄顏色設置爲窗口背景?

我在下面寫了代碼,但是我得到了消息Cannot implicitly convert type 'System.Drawing.Brush' to 'System.Windows.Media.Brush'

你能幫我怎麼做嗎?謝謝!

// This function used for both "Actived" and "Deactived" event 
    private void window_Activated(object sender, EventArgs e) 
    { 
     Background = (IsActive)? System.Drawing.SystemBrushes.ActiveCaption : 
      System.Drawing.SystemBrushes.InactiveCaption; 
    } 

編輯
目前我的窗口標題欄有石灰的顏色,如果它的活性,如果不活動的灰色,但其他用戶可能會不同勢。我怎樣才能通過代碼獲得這些顏色?

回答

2

由於您使用的是WPF,而不是使用System.Drawing.SystemBrushes類,因此應該使用System.Windows.SystemColors類。來自System.Drawing命名空間的畫筆與System.Windows.Media命名空間畫筆不直接兼容。

Background = (IsActive)? System.Windows.SystemColors.ActiveCaptionBrush : 
      System.Windows.SystemColors.InactiveCaptionBrush; 

如果你想在你的XAML使用這個,你可以使用基於更新的問題

Background="{x:Static SystemColors.ActiveCaptionBrush}" 

編輯如果你想使用的主題顏色,你必須使用PInvoke。本地方法是DwmGetColorizationColor。這將返回一個整數,因此您可以使用該整數創建一個SolidColorBrush並將其分配給您的背景。

[DllImport("dwmapi.dll", PreserveSig = false)] 
public static extern void DwmGetColorizationColor(out int pcrColorization, [MarshalAs(UnmanagedType.Bool)]out bool pfOpaqueBlend); 

int col; 
bool opac; 
DwmGetColorizationColor(out col, out opac); 

//convert the int to a colour 
byte[] bytes = BitConverter.GetBytes(col); 
Color color = Color.FromRgb(bytes[2], bytes[1], bytes[0]); 

Background = new SolidColorBrush(color); 

這應該得到你的檸檬綠色。

+0

工作。謝謝。我得到的顏色是默認的活動/非活動顏色。目前,我的Windows標題欄如果處於活動狀態,則爲酸橙色;如果處於非活動狀態,則爲灰色我怎樣才能獲得這些顏色? – Sakura

+1

@TuyenTk - 我已經更新了答案。它應該得到你的檸檬綠色。第一個答案中的InactiveCaptionBrush沒有得到正確的灰色? – keyboardP

+0

'bool opac'怎麼樣?我沒有獲得與窗口活動框架顏色完全相同的顏色,但是很近,稍微燒焦。 –