1

我正在尝试在 WPF 中实现有效的模式弹出窗口。

我已经使用透明窗口和 ShowDialog() 完成了此操作。该窗口可以由矩阵中的数百个控件中的任何一个触发(下例中的 dm)。dm[r,c].tb 实际上是一个 TextBox 控件。

以下代码应该可以很好地完成这个技巧:

                var location = dm[r, c].tb.PointToScreen(new Point(0, 0));
                popupWindow.Left = location.X;
                popupWindow.Top = location.Y - popupWindow.Height;
                popupWindow.ShowDialog();

事实上,窗口显示在控件的右侧和下方,越远,控件在主窗口中的向下或右侧越多。

我花了一段时间才意识到它实际上被精确地抵消了 1.5 倍,原因是,由于视力严重受损,我使用易于访问设置以 150% 的放大率运行我的机器。

该代码很容易在我的机器上解决这个问题:

                var location = dm[r, c].tb.PointToScreen(new Point(0, 0));
                popupWindow.Left = location.X/1.5;
                popupWindow.Top = location.Y/1.5 - popupWindow.Height;
                popupWindow.ShowDialog();

这在我的机器上提供了正确的结果,但是我如何抓住易于访问的放大倍数,使其在人们使用的任何放大倍率下都能正常工作?

4

0 回答 0