C# WPF 如何禁止窗口拖到屏幕边缘自动最大化

原文:C# WPF 如何禁止窗口拖到屏幕边缘自动最大化

win7以上的系统新增了功能--窗口拖到屏幕边缘自动最大化,如何用代码禁止?

如果窗体不允许修改大小,那么禁止最大化,其实很简单

直接将设置属性 this.ResizeMode = ResizeMode.NoResize;

但是这样就直接让窗体无法改变大小了

我们既想要能改变大小,又想禁止自动最大化,应该如何做?

 

因为拖到屏幕边缘自动最大化,有个必要条件是鼠标按下去,然后拖,可以利用这个间隙将ResizeMode设置一下,然后鼠标放开之后再把ResizeMode设置回来就行了

代码如下:

C# WPF 如何禁止窗口拖到屏幕边缘自动最大化

这段代码直接拷到新建的窗体上是无效的,因为鼠标按住标题栏根本不会进入mouseleftbuttondown事件,标题栏是系统控制的,而不属于window,一般稍复杂的项目都会把windowstyle设置成none,然后自定义标题栏,这样上方代码就可以起作用了。

 

更新:

上面的代码其实是有问题的,能解决问题,但是会有副作用

举个例子:若在窗体内部空白处中先点击左键并按住左键,然后拖动至窗体外,再松开,就会使ResizeMode 变成noresize.

再者,频繁改动ResizeMode  并不是一个很好的做法.

 

改进:

给mainWindow添加mouseDown事件,事件代码如下:

  1. mainWindow.MouseDown += HandleMouseDown;
  2. void MouseDownEvent(Object sender, MouseButtonEventArgs e)
  3. {
  4. if (e.ChangedButton == MouseButton.Left)
  5. {
  6. if (Mouse.LeftButton == MouseButtonState.Pressed)
  7. {
  8. var windowMode = this.ResizeMode;
  9. if (this.ResizeMode != ResizeMode.NoResize)
  10. {
  11. this.ResizeMode = ResizeMode.NoResize;
  12. }
  13. this.UpdateLayout();
  14. DragMove();
  15. if (this.ResizeMode != windowMode)
  16. {
  17. this.ResizeMode = windowMode;
  18. }
  19. this.UpdateLayout();
  20. }
  21. }
  22. }

 

 

 

 

 

 

 

C# WPF 如何禁止窗口拖到屏幕边缘自动最大化

上一篇:WPF TabControl Page 新增、关闭、传参、刷新


下一篇:C# 定时控件