【问题标题】:Windows Forms or WPF for Multiple Monitor app (each monitor getting different content)用于多监视器应用程序的 Windows 窗体或 WPF(每个监视器获取不同的内容)
【发布时间】:2014-08-23 04:44:58
【问题描述】:

我将构建一个在所有可用显示器上全屏显示的应用。 对于每个可用的监视器,我将加载不同的内容。因此,如果系统检测到 2 个监视器,我将生成 2 个窗口,每个窗口具有不同的内容(它们将是全屏的,接管包括任务栏在内的所有内容)

windows 窗体最适合这个还是 wpf. 同样在显示设置中,我假设每个额外的显示器都应该设置为“扩展桌面”,我将获得正确的工作区域。?

Windows 窗体提供了 Screen 类,但是当我在 1920x1080 的显示器上运行它时,我得到了

Device Name: \\.\DISPLAY1
Bounds: {X=0,Y=0,Width=1280,Height=720}
Type: System.Windows.Forms.Screen
Working Area: {X=0,Y=0,Width=1280,Height=693}
Primary Screen: True

【问题讨论】:

  • 忘记winforms。无论项目要求如何,都不建议将其用于任何新项目。在 WPF 中无法更轻松、更好地实现的 winform 绝对是您无法实现的。
  • 我看到的所有支持多显示器的示例都需要在 wpf 项目中使用 system.windows.forms dll
  • 这并不意味着您将使用 winforms 构建应用程序。您可能会使用该 dll(它实际上包装了本机 Win32 的东西)或直接绕过它调用 Win32 的东西。您甚至可以从 RefenceSource 获取源代码并将其复制粘贴到您自己的代码中。甚至使用 WPF 的System.Windows.SystemParameters。无论如何,您应该使用 WPF 来构建实际的 UI。

标签: wpf winforms


【解决方案1】:

WPF 可以轻松地同时支持多个窗口。如果您与他们订阅了 MVVM 模式,您可以通过任一方式在两个窗口之间进行交互

  • 将两个窗口绑定到视图模型的同一个实例,因此视图模型在它们之间共享。在窗口 A 中触发的按钮命令可以更新绑定到窗口 B 中视图的属性,反之亦然,举个简单的例子。
  • 实现消息传递平台,例如 MVVM light off nuget。这允许每个窗口都有自己的视图模型,但使用解耦消息进行交互。在同一个示例中,当通过其视图模型按下按钮时,窗口 A 会发出一条消息,窗口 B 的视图模型会侦听该消息并执行一些更新。

如果您的技能包括 WPF,或者您有时间学习 WPF - 请选择该选项。

stack overflow answer 将帮助您通过 WindowLoad 事件,使用框架 Screen 集合来控制您的 Windows 启动状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多