是否有WPF等效于System.Windows.Forms.Screen的功能?

21

我正在尝试创建一个WPF窗口,该窗口将包含整个桌面工作区。在WinForms中,我会通过获取System.Windows.Forms.Screen.AllScreens中所有边界的联合来实现此目的。

在WPF中是否有等效的类型或其他机制可用于获取整个桌面的边界,还是我需要使用WinForms类型?

4个回答

18
尝试使用SystemParameters.VirtualScreen*(Top、Left、Height和Width)属性。http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.virtualscreenheight(v=VS.100).aspx 不要使用winforms api,因为它没有考虑到WPF的度量单位不是像素。我最近遇到了这个问题,因为我的视力在下降,我将显示器设置为更高的dpi。我正在处理的代码库使用Winforms设置,UI比我的屏幕大。
如果您要使用winforms api,请查看此博客文章计算DPI因子

4
直截了当地指出:这正是 OP 想要的,没有多余的东西。虽然 Screen 可以单独枚举每个监视器,但 VirtualScreen 仅是总区域。 - DonBoitnott

14

2

仅使用WinForms。我认为没有直接的WPF等效物。


1
错误的,有WPF的等效物。请看我的回复。 - Michael Brown
16
哦?WPF能告诉我们每个显示器的情况吗?WPF能告诉你一个窗口位于哪个屏幕上吗(类似于Screen.FromControl())? - Qwertie
6
如果您有尺寸不相等的多个显示器,是否有相应的解决方案?正如Qwertie所提到的,要知道是哪个屏幕? - Marek
这样的回答是如何得到赞成票的?这根本不算是一个答案。 - Yves Calaci
1
导入winforms的问题在于,很容易意外引用winforms类型而不是wpf类型,这会使wpf代码混杂着非可移植的垃圾。突然间,几乎每个东西都有两种类型,其中一种是不需要的WinForms类型。千万不要这样做! - Robin Davies

1
你可以尝试使用SystemParameters.VirtualScreenWidth和相关参数。但这可能不如继续使用WinForms API提供的结果好。
我唯一能看到的WinForms类型的缺点是额外的依赖项和与此相关的更大的工作集。

每个东西都有两种类型!两个矩形。两个点。两个…… - Robin Davies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接