【问题标题】:WPF and WIndows 10. Invisible border around windows?WPF 和 WINdows 10. 窗口周围不可见的边框?
【发布时间】:2016-02-07 22:09:49
【问题描述】:

当我尝试将我的窗口并排或一角对齐时,我发现屏幕边缘和窗口边缘之间存在某种填充。 我从模板创建了新的 wpf 项目,在构造函数中只添加了两行并得到了这个:



为什么它不适合屏幕边缘?当我尝试像这样将窗口放在右下角时,同样的问题:

Rect workArea = SystemParameters.WorkArea;
Left = workArea.Location.X + workArea.Width - Width;
Top = workArea.Location.Y + workArea.Height - Height;

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

当然我可以将Left 属性设置为-7,但这不是解决方案。如何正确设置窗口位置,使其在win7和win10上都能正常显示?

【问题讨论】:

  • 在右下角的情况下,您是否尝试过 ActualWidth 和 ActualHeight 属性(显示后)?
  • @KyloRen 是的,结果是一样的
  • 可能是“this.Left = 0 - SystemParameters.ResizeFrameVerticalBorderWidth - SystemParameters.FixedFrameVerticalBorderWidth;”可以从窗口 10 的编程角度使用。否则我认为您必须使用 ChromeWindow 类。跨度>

标签: c# wpf windows-10


【解决方案1】:

左侧/右侧/底部可调整大小的边框现在在 Windows 10 上不可见,而该边框就是该间隙所在的位置。如果将窗口放在屏幕中间,然后将鼠标拖动到窗口的左边缘,您将看到光标变为调整大小光标,距离窗口边缘更远 8 个像素。这告诉你边界仍然存在。

您可以通过结合使用普通的GetWindowRect 函数和使用DwmGetWindowAttribute 函数以及DWMWA_EXTENDED_FRAME_BOUNDS 参数来获得offests。

【讨论】:

    【解决方案2】:

    它们保持指标不变(例如,注册表中的 PaddedBorderWidth 仍为 -60),并完全在主题(“Aero”)中实现清晰的调整大小句柄。它不是玻璃,它只是 Office 2013 呈现它们的方式完全不可见。您的应用程序将字面上在 Windows 7 和 10 上以相同的像素坐标进行绘制,只有 Windows 7 具有填补该空白的玻璃效果。

    【讨论】:

    • 好的,是否有可能知道是否有窗户玻璃效果(及其厚度)以避免丑陋的差距?
    • 我不知道。由于边框大小是由主题而不是注册表中的 windowmetrics 应用的,我认为您甚至无法查询它来确定。想到的第一件事就是当 Windows 版本被检测为 10 或更高时移动多少像素。
    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多