【问题标题】:Is there a WPF equaivalent to System.Windows.Forms.Screen?是否有等效于 System.Windows.Forms.Screen 的 WPF?
【发布时间】:2010-04-24 14:59:50
【问题描述】:

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

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

【问题讨论】:

    标签: wpf desktop


    【解决方案1】:

    尝试 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 上的这篇博文。

    【讨论】:

    • 只是直截了当地指出:这正是 OP 想要的,仅此而已。 Screen 可以单独枚举每个监视器,VirtualScreen 只是总面积。
    【解决方案2】:

    我已成功使用 WpfScreenHelper 0.3.0.0,目前在 Github 或 Nuget, https://github.com/micdenny/WpfScreenHelper

    它做了很多年前 .NET 框架应该做的事情。 我需要检查 WPF 中的任何屏幕上是否存在某些坐标,如下所示:

    【讨论】:

      【解决方案3】:

      只需使用 WinForms。我认为没有直接的 WPF 等效项。

      【讨论】:

      • 错误的有 WPF 等效项。查看我的回复。
      • 哦? WPF 可以单独告诉我们每个监视器吗? WPF 能否告诉您窗口在哪个屏幕上(例如 Screen.FromControl()?)
      • 如果您有多个大小不等的显示器怎么办?有什么等价物来处理这个吗? Qwertie 提到它是哪个屏幕?
      • 这样的答案如何获得投票?这根本不是答案。
      • 导入 winforms 的问题是很容易意外引用 winforms 类型而不是 wpf 类型,这最终会污染 wpf 代码与不可移植的杂物。突然之间,everything 有两种类型,其中一种是不需要的 WInForms 类型。不要这样做!!!
      【解决方案4】:

      您可以尝试 SystemParameters.VirtualScreenWidth 和相关参数。这可能不如继续使用 WinForms API 提供的结果那么好。

      我可以看到 WinForms 类型的唯一缺点是额外的依赖项以及与之相关的更大的工作集。

      【讨论】:

      • ...加上两种类型的一切!两个矩形。两点。两个....
      猜你喜欢
      • 2012-02-26
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2014-01-25
      相关资源
      最近更新 更多