多监视器应用程序的Windows窗体或WPF(每个监视器获取不同的内容)

多监视器应用程序的Windows窗体或WPF(每个监视器获取不同的内容),wpf,winforms,Wpf,Winforms,我将建立一个应用程序,将在所有可用的显示器全屏。 对于每个可用的显示器,我将加载不同的内容。因此,如果系统检测到2个监视器,我将生成2个窗口,每个窗口具有不同的内容(它们将是全屏的,接管所有内容,包括任务栏等) windows窗体是否最适合此或wpf。 另外,在显示设置中,我假设每个额外的显示器都应该设置为“扩展桌面”,谁将获得正确的工作区域 Windows窗体提供Screen类,但当我在1920x1080显示器上运行它时,我得到 Device Name: \\.\DISPLAY1 Bounds

我将建立一个应用程序,将在所有可用的显示器全屏。 对于每个可用的显示器,我将加载不同的内容。因此,如果系统检测到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

WPF可以轻松地同时支持多个窗口。如果使用它们订阅MVVM模式,则可以通过以下任一方式在两个窗口之间进行交互:

  • 将两个窗口绑定到视图模型的同一实例,以便在它们之间共享视图模型。在窗口A中触发的按钮命令可以更新绑定到窗口B中视图的属性,反之亦然,举一个简单的例子
  • 实现消息传递平台,例如MVVM light off nuget。这允许每个窗口都有自己的视图模型,但使用解耦的消息进行交互。在同一示例中,窗口A通过其视图模型按下按钮时发出消息,窗口b的视图模型侦听该消息并执行一些更新操作
如果你的技能集包括,或你有时间学习,WPF-去与该选项


这将有助于使用frameworks屏幕集合,通过WindowLoad事件控制windows启动状态。

winforms。无论项目要求如何,都不建议将其用于任何新项目。使用winforms绝对没有什么比在WPF中实现更简单、更好的了。我看到的所有支持多监视器的示例都要求在WPF项目中使用system.windows.forms dll,但这并不意味着您将使用winforms构建应用程序。您可以使用该dll(实际上它包装了本机Win32内容)或直接绕过它调用Win32内容。您甚至可以从RefenceSource获取源代码,并将其复制粘贴到自己的代码中。甚至使用WPF。不管怎样,您都应该使用WPF来构建实际的UI。