过去,我一直与此响应相关联,该响应是关于将 WPF 像素坐标转换为桌面坐标的类似问题,但是我不确定我是否理解所涉及的数学。
Astonish 的回答指出“每个 WPF 单元的像素 = ConstantWPFUnit 大小 * 监视器 DPI;” 并且“恒定的 WPF 单元大小是 1/96”。
在我的例子中,我从一个图形对象中获取了 DPI,该对象是从我在截取桌面截图后创建的位图对象(因为我找不到 Astonish 所说的属性)创建的,所以我有:
Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;
鉴于从图形对象返回的 DPI 是 96,我只剩下
WpfUnit = (1 / 96) * 96 = 1
但是,由于某些(对我而言)未知的原因,WpfUnit 以 0 的形式出现。我能看到解决这个问题的唯一方法是说
if(WpfUnit == 0) WpfUnit = 1;
即使这样也不能真正解决问题,因为高度值和顶部值在乘以链接答案中建议的 WpfUnit 时,除了乘以 1 外,对它们没有任何作用。
所以,总而言之,我仍然坚持将 WPF 像素转换为桌面像素。对此的任何帮助将不胜感激。