WPF中窗体最大化问题的解决方法

2020-01-05 09:33:44丽君

不过可以通过WndProc来自己实现,其中会有一个问题:利用WndProc来监听,结果是比较实时的,而SystemParameters中的值,实时性可能会跟不上,从而获取到的值仍然是旧的。

对此有两种解决方案:

* 1、添加一个Timer 或者 直接Sleep,等待一下在SystemParameters的值【此法相对简单,但无法完全保证有效,毕竟SystemParameters中值更新的时间,还是要看.Net Framework】;

* 2、利用Windows API读取系统值,用方法SystemParametersInfo获取SPI_GETWORKAREA【微软官方其实就是用这个获取的,这样比我下面的运行效率还要高些】

另外:下面的方法可能会有系统兼容性问题,我在Windows 10上是通过的,但在Windows 8.1上,边界存在问题【不确定是不是Framework在系统上有bug】

注册事件:SystemParameters.StaticPropertyChanged += SystemParameters_StaticPropertyChanged;

添加如下代码:


private void SystemParameters_StaticPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
 if (e.PropertyName == "WorkArea")
 {
 if (this.WindowState == WindowState.Maximized)
 {
  double top = SystemParameters.WorkArea.Top;
  double left = SystemParameters.WorkArea.Left;
  double right = SystemParameters.PrimaryScreenWidth - SystemParameters.WorkArea.Right;
  double bottom = SystemParameters.PrimaryScreenHeight - SystemParameters.WorkArea.Bottom;
  gd_main.Margin = new Thickness(left, top, right, bottom);
 }
 }
}

相关下载

点击查看完整源代码