4

过去,我一直与响应相关联,该响应是关于将 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 像素转换为桌面像素。对此的任何帮助将不胜感激。

4

2 回答 2

6

WpfUnit 输出为零,因为它使用 1/96 进行整数数学运算。明确地将这些数字声明为浮点数。

于 2009-07-27T17:07:00.070 回答
2

内置的PointToScreenPointFromScreen方法怎么样?还是我错过了什么?

于 2009-07-27T17:29:54.690 回答