ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WPF WindowStyle None 최대화 시 작업 표시줄 보이게 하기
    C#/WPF 2018. 4. 26. 15:23

    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로 설정하고, 반복문을 나가게 됩니다.




    이 방법으로 되지 않는 케이스도 있겠지만 대부분의 상황에서는 적용될 것입니다.

    댓글

GiGong