-
WPF WindowStyle None 최대화 시 작업 표시줄 보이게 하기C#/WPF 2018. 4. 26. 15:23
WPF에서 WindowStyle을 None으로 설정하고 Maximize를 하면 화면 전체를 가득 채워서 작업 표시줄까지 가리게 됩니다.
이럴 경우에는 MaxHeight를 통해 최대 크기를 제한해주면 작업 표시줄을 가리지 않게 됩니다.
하지만 사용자의 모니터가 여러대이면서 각 모니터의 해상도가 다를 경우에는 모니터마다 MaxHeight를 바꿔주어야 합니다.
먼저 모니터가 1개이거나 모든 모니터의 해상도가 같을 때 MaxHeight를 설정하는 법입니다.
123456public MainWindow(){InitializeComponent();MaxHeight = SystemParameters.WorkArea.Height;}cs 생성자 또는 Loaded 이벤트에서 MaxHeight를 설정해 줍니다.
SystemParameters 는 시스템의 정보를 가지고 있으며 WorkArea는 클라이언트가 사용 가능한 크기를 알려줍니다.
모니터가 2개 이상이고, 모니터의 해상도가 다를 때에 설정하는 법입니다.
우선 어셈블리 참조가 필요합니다.
※참조 추가 -> 어셈블리 -> System.Drawing , System.Windows.Forms
코드 입니다.
123456789101112131415System.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로 설정하고, 반복문을 나가게 됩니다.
이 방법으로 되지 않는 케이스도 있겠지만 대부분의 상황에서는 적용될 것입니다.
'C# > WPF' 카테고리의 다른 글
WPF 타이틀 바 바꾸기(Title Bar Custom) (0) 2018.04.27 WPF 최소화 최대화 종료 버튼 만들기 (0) 2018.04.27 WPF System Menu 불러오기 (0) 2018.04.26 WPF Drag, Drop이 되는 ListBox (0) 2018.02.27 WPF ListView(ListBox) 드래그 하는 중 스크롤 (0) 2018.01.31 댓글