码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2020-01-18 14:44:05      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:pyc   解决   sdn   自定义   屏幕   win   鼠标   resize   窗口   

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

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

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

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

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

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

 

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

代码如下:

技术图片

这段代码直接拷到新建的窗体上是无效的,因为鼠标按住标题栏根本不会进入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 如何禁止窗口拖到屏幕边缘自动最大化

标签:pyc   解决   sdn   自定义   屏幕   win   鼠标   resize   窗口   

原文地址:https://www.cnblogs.com/lonelyxmas/p/12208800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!