为什么 Window.Height 和 Window.Width 不准确? (C#, WPF)
Why are Window.Height and Window.Width not exact? (C#, WPF)
我注意到在将 windows 高度和宽度(或 Min/MaxHeight 和 Min/MaxWidth 在这方面)设置为特定值(如 800x450)时 window 本身可以小于设定值。只有在将 WindowStyle
设置为 None
.
时,这些值才真正准确
主窗口:
- XAML 中设置的尺寸:800x450
- 实际尺寸:786x443
SecondWindow(背景中的浅蓝色)
- XAML 中设置的尺寸:800x450
- 窗口样式:None
- 实际尺寸:800x450
是什么导致 window 比预期的要小?另外,它是否总是高度相差 7px,宽度相差 14px?
这是旧的、传统的 window 边界(位置和大小)和“扩展框架边界”之间的差距。后者实际上是可见的window边界,可以通过DwmGetWindowAttribute function with DWMWA_EXTENDED_FRAME_BOUNDS得到。这两个边界匹配,在 WPF 的情况下,当 WindowStyle=None
和 AllowsTransparency=True
.
据我所知,当显示器DPI为96(默认,100%)时,间隙的厚度为7px(左、右、下),并随着显示器DPI的增加而增加。您可以通过搜索上述关键字找到一些解决这一差距的技巧。
我注意到在将 windows 高度和宽度(或 Min/MaxHeight 和 Min/MaxWidth 在这方面)设置为特定值(如 800x450)时 window 本身可以小于设定值。只有在将 WindowStyle
设置为 None
.
主窗口:
- XAML 中设置的尺寸:800x450
- 实际尺寸:786x443
SecondWindow(背景中的浅蓝色)
- XAML 中设置的尺寸:800x450
- 窗口样式:None
- 实际尺寸:800x450
是什么导致 window 比预期的要小?另外,它是否总是高度相差 7px,宽度相差 14px?
这是旧的、传统的 window 边界(位置和大小)和“扩展框架边界”之间的差距。后者实际上是可见的window边界,可以通过DwmGetWindowAttribute function with DWMWA_EXTENDED_FRAME_BOUNDS得到。这两个边界匹配,在 WPF 的情况下,当 WindowStyle=None
和 AllowsTransparency=True
.
据我所知,当显示器DPI为96(默认,100%)时,间隙的厚度为7px(左、右、下),并随着显示器DPI的增加而增加。您可以通过搜索上述关键字找到一些解决这一差距的技巧。