win10 wpf window 定位错误
win10 wpf window positioning bug
我在 windows 10 的 window 定位中遇到了一个错误(?)。我已经在 WPF 中复制了这个。假设我像这样创建了一个 window:
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();
我的分辨率是 1920x1080,所以我希望 window 的左边正好在 1000px 的中心右边(就像在 windows 8 中一样),但事实并非如此。通过测试(通过悬停鼠标和抓取鼠标坐标,以及通过 PointToScreen 进行测试)它表明 window 的 X(左)位置实际上是 1250,Y(顶部)位置是 125 .所以所有的坐标都被调整了25%。但是,如果您检查 Window.Left 属性,它仍然显示 1000,尽管 window 实际上位于 1250。
我立即在 windows 中寻找显示设置,我发现了这个:
所以我想,如果这是罪魁祸首,那只是以某种方式检测到这一点的问题,除了我发现即使将其更改为 100% 而不是 125% 实际上 没有变化 错误依旧。
还有其他人 运行 遇到这个错误吗?如果它是 windows 显示设置的问题,有什么方法可以检测到它吗?
在问题评论中 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 和虚拟像素而不是物理像素进行布局。
我在 windows 10 的 window 定位中遇到了一个错误(?)。我已经在 WPF 中复制了这个。假设我像这样创建了一个 window:
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();
我的分辨率是 1920x1080,所以我希望 window 的左边正好在 1000px 的中心右边(就像在 windows 8 中一样),但事实并非如此。通过测试(通过悬停鼠标和抓取鼠标坐标,以及通过 PointToScreen 进行测试)它表明 window 的 X(左)位置实际上是 1250,Y(顶部)位置是 125 .所以所有的坐标都被调整了25%。但是,如果您检查 Window.Left 属性,它仍然显示 1000,尽管 window 实际上位于 1250。
我立即在 windows 中寻找显示设置,我发现了这个:
所以我想,如果这是罪魁祸首,那只是以某种方式检测到这一点的问题,除了我发现即使将其更改为 100% 而不是 125% 实际上 没有变化 错误依旧。
还有其他人 运行 遇到这个错误吗?如果它是 windows 显示设置的问题,有什么方法可以检测到它吗?
在问题评论中 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 和虚拟像素而不是物理像素进行布局。