问题描述: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" 设置后窗口的尺寸和位置就变了;
不知道微软为何会这么做,有知道的欢迎留言.