WPF无边框窗口显示尺寸小于设定值,如何实现跨多屏全屏?
解决WPF跨多显示器全屏无边框窗口的问题
你的代码已正确获取虚拟屏幕尺寸,但出现6像素间距、未覆盖任务栏的问题,核心源于WPF窗口默认行为和系统设置的影响,以下是修复方案:
关键修复点
- 禁用窗口自动调整:设置
ResizeMode = ResizeMode.NoResize,消除系统默认添加的隐形边框 - 强制覆盖任务栏:设置
Topmost = true,让窗口置于所有界面元素之上 - 规避单屏最大化限制:保持
WindowState.Normal,避免Maximized仅适配单屏的问题 - 修正DPI缩放偏差:添加DPI感知配置,确保窗口尺寸匹配物理屏幕像素
修复后的完整代码
using System; using System.Windows; namespace BlackScreen { public partial class App : Application { [STAThread] public static void Main() { App app = new App(); Window window = new Window(); // 核心窗口样式设置 window.WindowStyle = WindowStyle.None; window.ResizeMode = ResizeMode.NoResize; window.Topmost = true; window.WindowState = WindowState.Normal; // 绑定虚拟屏幕全尺寸 window.Top = SystemParameters.VirtualScreenTop; window.Left = SystemParameters.VirtualScreenLeft; window.Width = SystemParameters.VirtualScreenWidth; window.Height = SystemParameters.VirtualScreenHeight; window.Show(); app.MainWindow = window; app.Run(); } } }
高DPI系统补充配置
如果系统开启了高DPI缩放,需在应用程序的app.manifest中添加以下配置,确保尺寸计算准确:
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware> </windowsSettings> </application>
内容的提问来源于stack exchange,提问作者Harry Muscle
相关产品推荐
相关产品推荐

