【问题标题】:Why are Window.Height and Window.Width not exact? (C#, WPF)为什么 Window.Height 和 Window.Width 不准确? (C#,WPF)
【发布时间】:2021-08-30 11:38:25
【问题描述】:

我注意到在将窗口的高度和宽度(或在这方面的 Min/MaxHeight 和 Min/MaxWidth)设置为特定值(如 800x450)时,窗口本身可以小于设置值。只有在将WindowStyle 设置为None 时,这些值才真正准确。

主窗口:

  • XAML 中设置的大小:800x450
  • 实际尺寸:786x443

SecondWindow(背景为浅蓝色)

  • XAML 中设置的大小:800x450
  • 窗口样式:无
  • 实际尺寸:800x450

是什么导致窗口小于预期?高度和宽度总是相差 7px 和 14px?

【问题讨论】:

  • “窗口本身可以小于设定值” - 你是如何确定的?
  • @FranzGleichmann 截图并测量了宽度和高度(以 px 为单位)。自己试试。当设置为 WindowStyle="None" 时,它与 XAML 中设置的宽度和高度完全匹配。当您将 WindowStyle 保留为默认值时,它会比预期的要小。
  • 在您的测量中,是否包括边框?

标签: c# wpf window height width


【解决方案1】:

它是旧的传统窗口边界(位置和大小)与“扩展框架边界”之间的差距。后者实际上是可见的窗口边界,可以通过DwmGetWindowAttribute 函数和DWMWA_EXTENDED_FRAME_BOUNDS 获得。这两个边界匹配,在 WPF 的情况下,当 WindowStyle=NoneAllowsTransparency=True 时。

据我所知,当显示器 DPI 为 96(默认值,100%)时,间隙的厚度为 7px(左、右、下),并随着显示器 DPI 的增加而增加。通过搜索上述关键字,您可以找到一些解决这一差距的技巧。

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多