c# - 为什么 Window.Height 和 Window.Width 不准确?(C#,WPF)
问题描述
我注意到在将窗口高度和宽度(或在这方面的 Min/MaxHeight 和 Min/MaxWidth)设置为特定值(如 800x450)时,窗口本身可以小于设置值。这些值真正准确的唯一时间是在设置WindowStyle
to时None
。
主窗口:
- XAML 中设置的大小:800x450
- 实际尺寸:786x443
SecondWindow(背景为浅蓝色)
- XAML 中设置的大小:800x450
- 窗口样式:无
- 实际尺寸:800x450
是什么导致窗口小于预期?高度和宽度总是相差 7px 和 14px?
解决方案
它是旧的、传统的窗口边界(位置和大小)和“扩展框架边界”之间的差距。后者实际上是可见的窗口边界,可以通过DwmGetWindowAttribute函数和DWMWA_EXTENDED_FRAME_BOUNDS获得。在 WPF 的情况下,这两个边界匹配 whenWindowStyle=None
和AllowsTransparency=True
.
据我所知,当显示器 DPI 为 96(默认,100%)时,间隙的厚度为 7px(左、右、下),并随着显示器 DPI 的增加而增加。通过搜索上述关键字,您可以找到一些解决这一差距的技巧。
推荐阅读
- mongodb - 从分组的 mongo 聚合中的对象数组创建对象
- javascript - 来自网页的 Javascript JSON 图像
- php - 如何在 ForEach 循环内的 Laravel Blade 中显示摘要数据?
- git - Transfering repository of project from company to github with submodules
- julia - 如何在 Julia 中定义非 1 或任意索引数组?
- r - 基于多列的特定序列的R dplyr过滤器
- swift - Firestore 查询问题
- testing - 为什么 HttpClient 类型的 getnow() 方法未定义?
- amazon-web-services - 如何防止通过 IP 地址访问 AWS beanstalk 应用程序?
- arrays - 请求 wsdl 服务数组对象