我在Windows 10中遇到了一个窗口定位错误(?)。 我已经在WPF中重现了这一点。 比方说,我创build一个如下窗口:
var d = new Window(); d.Width = 100; d.Height = 100; d.Left = 1000; d.Top = 100; d.WindowStyle = WindowStyle.None; d.ResizeMode = ResizeMode.NoResize; d.Show();
我在1920×1080的分辨率,所以我希望窗口的左侧正好在1000px的中心(如在Windows 8中),但事实并非如此。 通过testing(通过hover鼠标,抓取鼠标坐标以及通过使用PointToScreen进行testing),它显示窗口的X(左)位置实际上是1250,Y(顶)位置是125.所以坐标被调整了25%。 但是,如果您检查Window.Left属性,它仍然说1000实际上位于1250的窗口。
我立即去窗口中寻找显示设置,我发现这个:
所以我想,如果这是罪魁祸首,这只是一个如何检测这个问题,除了我发现,即使改为100%,而不是125%,实际上没有改变 ,错误仍然是相同的。
所以有其他人遇到这个bug,如果这是一个窗口显示设置的问题,有什么办法来检测它?
在Cyral的帮助下,在这个问题的评论中,找到DPI是这样的:
var dpiX = (int)typeof(SystemParameters).GetProperty("DpiX", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null); var dpiY = (int)typeof(SystemParameters).GetProperty("Dpi", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null);
然后进行校正: [Desired Pixel Coordinate] * (96 / [dpi])
这是由于WPF使用DPI和虚拟像素进行布局而不是物理像素。