WPF和Windows 10. 窗口周围的隐形边框?

11
当我尝试将我的窗口与显示器的边缘对齐时,我发现屏幕边缘和我的窗口之间存在某种填充。我从模板创建了新的wpf项目,仅在构造函数中添加了两行代码,并得到了这个结果: 为什么它不能适应屏幕的边缘?当我尝试把窗口放到右下角时也会有同样的问题:
Rect workArea = SystemParameters.WorkArea;
Left = workArea.Location.X + workArea.Width - Width;
Top = workArea.Location.Y + workArea.Height - Height;

看起来窗口有7像素的边框(就像在win7上一样),但在win10上不可见。我发现如果我将WindowStyleResizeMode都设置为WindowStyle.NoneResizeMode.NoResize,系统会正确地放置窗口,但这不是我想要的。在win7上相同的程序按预期工作。

当然,我可以将Left属性设置为-7,但这不是解决方案。如何正确设置窗口位置,以便在win7和win10上都能看起来良好?


如果遇到右下角的情况,你尝试过使用 ActualWidth 和 ActualHeight 属性(在显示之后)吗? - Kylo Ren
@KyloRen 是的,结果是一样的。 - BlackOverlord
可能从编程角度来看,可以使用“this.Left = 0 - SystemParameters.ResizeFrameVerticalBorderWidth - SystemParameters.FixedFrameVerticalBorderWidth;”在Windows 10上进行操作。否则,我认为您需要使用ChromeWindow类。 - Kylo Ren
2个回答

9
在Windows 10上,左/右/底部的可调整边框现在是看不见的,而这个边框就是那个间隙的位置。如果您把窗口放在屏幕中央,并将鼠标拖动到窗口左侧边缘,您会看到光标会向外移动8像素,并变成一个调整大小的光标。这告诉您该边框仍然存在。
您可以通过使用普通的GetWindowRect函数和DwmGetWindowAttribute函数的组合,以及DWMWA_EXTENDED_FRAME_BOUNDS参数来获取偏移量。

0

他们保持度量标准不变(例如,注册表中的PaddedBorderWidth仍为-60),并完全在主题(“Aero”)中实现清晰的调整手柄。这不是玻璃,而是Office 2013以绝对透明的方式呈现它们。您的应用程序将在Windows 7和10上字面上以相同的像素坐标绘制,只有Windows 7会填充该间隙的玻璃效果。


好的,是否有可能知道窗户是否具有玻璃效果(以及其厚度),以避免出现丑陋的间隙? - BlackOverlord
我不知道有任何方法可以做到这一点。由于边框大小是由主题而不是注册表中的窗口度量应用的,我认为您甚至无法查询以确定。首先想到的是,在检测到Windows版本为10或更高版本时,只需将其移位多少像素即可。 - CmdrKeene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接