DragMove() and Maximize

前端 未结 6 1190
误落风尘
误落风尘 2020-12-16 01:32

I have a problem with my custom window (AllowTransparency, WindowStyle=None) in WPF. DragMove() method works good, but when I maximize window, or it maximizing automatically

6条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-16 01:50

    Here is my method. Try make it shorter )))

    private void InitHeader()
    {
        var border = Find("borderHeader");
        var restoreIfMove = false;
    
        border.MouseLeftButtonDown += (s, e) =>
        {
            if (e.ClickCount == 2)
            {
                if ((ResizeMode == ResizeMode.CanResize) ||
                    (ResizeMode == ResizeMode.CanResizeWithGrip))
                {
                    SwitchState();
                }
            }
            else
            {
                if (WindowState == WindowState.Maximized)
                {
                    restoreIfMove = true;
                }
    
                DragMove();
            }
        };
        border.MouseLeftButtonUp += (s, e) =>
        {
            restoreIfMove = false;
        };
        border.MouseMove += (s, e) =>
        {
            if (restoreIfMove)
            {
                restoreIfMove = false;
                var mouseX = e.GetPosition(this).X;
                var width = RestoreBounds.Width;
                var x = mouseX - width / 2;
    
                if (x < 0)
                {
                    x = 0;
                }
                else
                if (x + width > screenSize.X)
                {
                    x = screenSize.X - width;
                }
    
                WindowState = WindowState.Normal;
                Left = x;
                Top = 0;
                DragMove();
            }
        };
    }
    
    private void SwitchState()
    {
        switch (WindowState)
        {
            case WindowState.Normal:
            {
                WindowState = WindowState.Maximized;
                break;
            }
            case WindowState.Maximized:
            {
                WindowState = WindowState.Normal;
                break;
            }
        }
    }
    

    (To get screenSize I use native methods)

提交回复
热议问题