WPF拓展屏幕(分屏)全屏解决任务栏外不占满

事情是这样的,笔者最近正在奋笔疾书的敲代码时突然客户方爆出了个bug,bug是什么呢?

客户使用的时笔记本电脑启动了软件,但是在连接外显示屏的时候,把软件拖到了扩展屏幕上进行显示,居然发现点击最大化图标的时候没法全屏显示,作者赶紧快马加鞭进行处理。

首先,我代码时直接使用了 window.WindowState = WindowState.Maximized;这样的方法使窗口进行最大化,这个方法在正常情况下是常被使用的方法,因为快速简便,但是现WPF的程序的窗口基本都是自定义的样式,几乎没有人还在用窗口原生的WindowStyle。笔者也是在属性里设置了WindowStyle = None;然后用了这样的最大化,这在笔记本原本屏幕和台式机上都是没问题的,但是当笔记本接上了外接屏幕之后,怎What fuck! 至此bug完美复现…

图片如下
请添加图片描述

当然了也不是说这种最大化方法有问题,在使用原生的最大最小化界面的时候,是没有任何问题的。可见只是我们没有设置好属性,因为用此方法的最大化本质上是给窗口赋值最大高度和宽度即MaxHeight和MaxWidth,所以肯定是要从这一关键点入手。

对于屏幕的属性,WPF提供了一个类方便获取,SystemParameters,但是经过尝试,用WorkArea,PrimaryScreen,FullScreen获取的高度宽度实际上与拓展屏幕的实际宽高不符合,所以根本不能用,实际上Maxsized方法默认的就是用这样的方法去获取的高度,结果跟之前是一样的

经过尝试下来,有一种方法可以,那就是利用winform里面的Screen的获取方法

                //获取窗口句柄 
                var handle = new WindowInteropHelper(this).Handle;
                //获取当前显示器屏幕
                System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(handle);
                //调整窗口最大化,全屏的关键代码就是下面3句
                this.MaxWidth = screen.Bounds.Width + 7;
                this.MaxHeight = screen.Bounds.Height;
                this.WindowState = WindowState.Maximized;

测试下来这个方法是没有问题的可以获取,当然了方法不只是这一种只不过,C#用这个方法最简便快捷,同时要使用Maxsized这种方式在拓展屏幕上没问题的思路就是要设置MaxHeight和Width的值,这个是非常关键的,有了这个关键点,我们才能更加得心应手的去解决问题,那解决方法自然就变得开放了起来,好了,这个问题就是记录一下发散下自己的思维,如果有用,别忘了给个赞

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MasterRyan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值