WPF窗口吸附屏幕左侧存在间隙问题咨询
WPF窗口设Left=0仍有8像素间隙的原因
哈哈,这个问题我之前折腾过好一阵子!其实主要是下面这几个原因导致的:
系统非客户区边框搞的鬼
默认的WPF窗口带了系统自带的标题栏、边框这些非客户区元素。你设置Left="0"的时候,这个值指的是窗口**自己的内容区域(客户区)**的左边缘位置,而不是整个窗口的最左边界。系统的边框刚好会占掉大概8像素的空间,所以看起来就和屏幕左侧有个小间隙了。DPI缩放的偏差
如果你的显示器开了DPI缩放(比如125%、150%这类常见的缩放比例),WPF的坐标计算会因为系统的DPI虚拟化出现偏移。Left设为0在缩放后,并没有真正对应屏幕物理像素的0位置,自然就会留出一点缝隙。窗口样式设置的影响
要是你自定义了窗口样式,比如设了WindowStyle="None"但没处理好边缘渲染,或者ResizeMode的设置改变了窗口边框的计算逻辑,也可能出现这种间隙。有些自定义窗口的边框处理逻辑和默认系统窗口不一样,就容易出这种小问题。
要是你想解决的话,可以试试直接操作原生窗口句柄来定位,比如用WindowInteropHelper来设置整个窗口的位置,而不是只靠WPF的Left属性。举个简单的代码例子:
var helper = new WindowInteropHelper(this); var screen = System.Windows.Forms.Screen.FromHandle(helper.Handle); var workingArea = screen.WorkingArea; helper.WindowLeft = workingArea.Left; helper.WindowTop = workingArea.Top;
记得要引用System.Windows.Forms这个程序集哦。
内容的提问来源于stack exchange,提问作者Sandwich
相关产品推荐
相关产品推荐

