【发布时间】:2010-04-24 14:59:50
【问题描述】:
我正在尝试创建一个包含整个桌面工作区的 WPF 窗口。在 WinForms 中,我会通过在 System.Windows.Forms.Screen.AllScreens 中获取所有边界的联合来做到这一点。
是否有等效的类型或其他机制来获取 WPF 中整个桌面的边界,还是我需要使用 WinForms 类型?
【问题讨论】:
我正在尝试创建一个包含整个桌面工作区的 WPF 窗口。在 WinForms 中,我会通过在 System.Windows.Forms.Screen.AllScreens 中获取所有边界的联合来做到这一点。
是否有等效的类型或其他机制来获取 WPF 中整个桌面的边界,还是我需要使用 WinForms 类型?
【问题讨论】:
尝试 SystemParameters.VirtualScreen*(顶部、左侧、高度和宽度)属性。 http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.virtualscreenheight(v=VS.100).aspx
不要使用 winforms api,因为它没有考虑到 WPF 的测量单位不是像素的事实。我最近遇到了这个问题,因为我失去了视力并且将显示器设置为更高的 dpi。我正在处理的代码库使用了 Winforms 设置,并且 UI 比我的屏幕大。
如果您要使用 winforms api。查看calculating the DPI factor 上的这篇博文。
【讨论】:
Screen 可以单独枚举每个监视器,VirtualScreen 只是总面积。
我已成功使用 WpfScreenHelper 0.3.0.0,目前在 Github 或 Nuget, https://github.com/micdenny/WpfScreenHelper
它做了很多年前 .NET 框架应该做的事情。 我需要检查 WPF 中的任何屏幕上是否存在某些坐标,如下所示:
【讨论】:
只需使用 WinForms。我认为没有直接的 WPF 等效项。
【讨论】:
您可以尝试 SystemParameters.VirtualScreenWidth 和相关参数。这可能不如继续使用 WinForms API 提供的结果那么好。
我可以看到 WinForms 类型的唯一缺点是额外的依赖项以及与之相关的更大的工作集。
【讨论】: