wpf 设置窗口最大化后其实际尺寸大于显示器尺寸

问题描述:wpf窗口按如下设置后发现其实际尺寸为1934*1094(我显示器分辨率1920*1080)

AllowsTransparency="True"

WindowStyle="None"

WindowState = "Maximized"

Background="Transparent"

应用场景:实现一个手机到PC的笔迹同步显示的功能.

实现思路:

1.利用ffmpeg获取PC机视频流推给手机,达到实时显示PC桌面目的;

2.把手机上画的笔迹坐标按视频流分辨率计算出相对坐标发送给PC。

3.PC在用相对坐标值*屏幕尺寸(1920*1080)计算出实际坐标点,利用InkCanvas画出;

遇到的问题:

发现手机的笔迹和PC投屏过来的笔迹不重合;排查了手机端获取的视频流尺寸没问题(1920*1080)其显示的实际尺寸是1280*720(是等比缩放没毛病)

那问题肯定是在PC端,果然发现wpf在设置为最大化显示、无边框且透明时其Left 和Top都不为0(我机器上都是 -8)窗口的实际尺寸是1934*1094

解决办法:按如下设置:

       WindowStartupLocation="CenterScreen"
        WindowState="Maximized"
        Topmost="True"
        BorderThickness="0"
        Left="0"
        Top="0"
        MaxWidth = "{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}}"
        MaxHeight = "{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}}"
        ResizeMode="NoResize"
        
        WindowStyle="None"
        Background="Transparent"
        AllowsTransparency="True"    

参考链接: https://stackoverflow.com/questions/2092782/borderless-window-application-takes-up-more-space-than-my-screen-resolution

总结:出现这个问题的关键在于这句AllowsTransparency="True" 设置后窗口的尺寸和位置就变了;

不知道微软为何会这么做,有知道的欢迎留言.

没有困难创造困难也要上!
原文地址:https://www.cnblogs.com/tiaf/p/8580165.html