DragMove() and Maximize

前端 未结 6 1219
误落风尘
误落风尘 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:43

    In WPF I would highly recommend using Control.PointToScreen when restoring the window before your Window.DragMove. PointToScreen will also handle multiple monitor setups. This would simplify the restore to the following:

        private void OnMouseLeftButtonDown( object sender, MouseButtonEventArgs e )
        {
            if( e.ClickCount == 2 )
            {
                if( ResizeMode != ResizeMode.CanResize && 
                    ResizeMode != ResizeMode.CanResizeWithGrip )
                {
                    return;
                }
    
                WindowState = WindowState == WindowState.Maximized
                    ? WindowState.Normal
                    : WindowState.Maximized;
            }
            else
            {
                mRestoreForDragMove = WindowState == WindowState.Maximized;
                DragMove();
            }
        }
    
        private void OnMouseMove( object sender, MouseEventArgs e )
        {
            if( mRestoreForDragMove )
            {
                mRestoreForDragMove = false;
    
                var point = PointToScreen( e.MouseDevice.GetPosition( this ) );
    
                Left = point.X - ( RestoreBounds.Width * 0.5 );
                Top = point.Y;
    
                WindowState = WindowState.Normal;
    
                DragMove();
            }
        }
    
        private void OnMouseLeftButtonUp( object sender, MouseButtonEventArgs e )
        {
            mRestoreForDragMove = false;
        }
    
        private bool mRestoreForDragMove;
    

提交回复
热议问题