WPF WindowStyle None 최대화 시 작업 표시줄 보이게 하기
WPF에서 WindowStyle을 None으로 설정하고 Maximize를 하면 화면 전체를 가득 채워서 작업 표시줄까지 가리게 됩니다.
이럴 경우에는 MaxHeight를 통해 최대 크기를 제한해주면 작업 표시줄을 가리지 않게 됩니다.
하지만 사용자의 모니터가 여러대이면서 각 모니터의 해상도가 다를 경우에는 모니터마다 MaxHeight를 바꿔주어야 합니다.
먼저 모니터가 1개이거나 모든 모니터의 해상도가 같을 때 MaxHeight를 설정하는 법입니다.
1 2 3 4 5 6 | public MainWindow() { InitializeComponent(); MaxHeight = SystemParameters.WorkArea.Height; } | cs |
생성자 또는 Loaded 이벤트에서 MaxHeight를 설정해 줍니다.
SystemParameters 는 시스템의 정보를 가지고 있으며 WorkArea는 클라이언트가 사용 가능한 크기를 알려줍니다.
모니터가 2개 이상이고, 모니터의 해상도가 다를 때에 설정하는 법입니다.
우선 어셈블리 참조가 필요합니다.
※참조 추가 -> 어셈블리 -> System.Drawing , System.Windows.Forms
코드 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | System.Windows.Forms.Screen[] screens = System.Windows.Forms.Screen.AllScreens; private void Window_LocationChanged(object sender, EventArgs e) { int sum = 0; foreach (var item in screens) { sum += item.WorkingArea.Width; if (sum >= this.Left + this.Width / 2) { this.MaxHeight = item.WorkingArea.Height; break; } } } | cs |
먼저 멤버 변수로 현 사용자의 모든 모니터들의 상태를 갖고옵니다. (굳이 멤버변수가 아니여도 됩니다.)
그리고 Window의 LocationChanged Event를 통해 Window가 이동할 때마다 어떤 모니터에 있는지를 확인합니다.
Window가 어떤 모니터에 있는지의 기준은 각 Window의 중앙 부분 입니다.
sum 은 모니터들의 왼쪽 끝 부터 오른쪽 끝까지의 합입니다.
현재 Window의 중앙은 Left 값 + Width의 반 입니다.
그래서 sum보다 작다면 현재 더하게 된 Screen 안에 있다는 뜻이므로 현재 더한 item의 WorkingArea의 Height를
MaxHeight로 설정하고, 반복문을 나가게 됩니다.
이 방법으로 되지 않는 케이스도 있겠지만 대부분의 상황에서는 적용될 것입니다.