2013-04-16 4 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; 
    } 

편집
현재 내 창 제목 표시 줄이 활성 및 비활성 상태 일 경우 회색 있지만, 다른 사용자가 diffrent 수 있습니다 경우 라임 색상이있다. 코드로이 색상을 어떻게 얻을 수 있습니까?

답변

2

System.Drawing.SystemBrushes 클래스를 사용하는 대신 WPF을 사용하고 있으므로 System.Windows.SystemColors 클래스를 사용해야합니다. System.Drawing 네임 스페이스의 브러시는 System.Windows.Media 네임 스페이스 브러시와 직접 호환되지 않습니다. 당신이 당신의 XAML이를 사용하려는 경우 사용중인 테마 색상을 얻고 싶은 경우에

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

, 당신은 당신이 업데이트 된 질문

에 따라

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

그게 효과가 있습니다. 고맙습니다. 내가 얻는 색상은 기본 활성/비활성 색상입니다. 현재 내 윈도우 제목 표시 줄은 활성화되어 있으면 Lime 색상을, 비활성 상태이면 회색을 갖습니다. 이 색상을 어떻게 얻을 수 있습니까? – Sakura

+1

@TuyenTk - 답변을 업데이트했습니다. 그것은 귀하의 라임 그린 색상을해야합니다. 첫 번째 대답의 'InactiveCaptionBrush'가 정확한 회색 색상을 얻지 못합니까? – keyboardP

+0

'bool opac '은 어떨까요? 나는 활성 프레임 색상과 똑같은 색상을 얻지는 못하지만 닫고, 약간 구운다. –