wpf双显示器应用?

时间:2011-09-28 18:09:00

标签: wpf multiple-monitors

我是WPF的新手。我想创建一个双显示器/投影仪应用程序。我想要做的是在一台显示器上安装“演示者屏幕”,在辅助监视器上安装另一个面板,类似于powerpoint的工作原理。我正在努力围绕面板和XAML进行思考。所以我所追求的是用户点击屏幕1上的按钮,并在屏幕2上更新信息。

我正在使用此代码:

this.Width = System.Windows.SystemParameters.VirtualScreenWidth;
this.Height = System.Windows.SystemParameters.VirtualScreenHeight;
this.Top = 0;
this.Left = 0;

设置屏幕的宽度和高度。

编辑:

后一个目标是使screen2根据screen1

上的选择从数据库中检索项目

问题:教程,去处,推动如何从monitor1上的按钮更新monitor2

2 个答案:

答案 0 :(得分:5)

简答

在两个视图之间创建共享的视图模型;使其中一个视图 master (进行更改)和另一个纯粹的演示文稿。视图是新窗口。最初不要关心窗口位置(我们稍后会介绍)只是让共享的viewmodel工作。

提示:研究MVVM模式。 Google有很多关于这个主题的文章。

长答案

在您研究了MVVM并创建了一些示例应用程序(来自scatch或使用框架)之后,下面是您希望实现的一些额外功能,以创建“类似powerpoint”的应用程序。

  • 全屏模式

    至少你会希望演示文稿窗口全屏显示。为此,您需要将WindowStyle设置为None,将AllowsTransparency设置为True

    如果你想让第二个窗口也全屏,你可能需要做一些Win32覆盖,以使窗口最大化而不覆盖任务栏(如果你想知道如何做这个就发表评论)。

  • 检测多个监视器

    使用Win32 Interop命令获取监视器的大小和位置。互联网上将有大量文章可以帮助您(或发布另一个StackoverFlow问题)。

    这将是一个neat™功能,因为它将正确定位两个窗口(使用辅助屏幕作为演示)。


这就是我现在能够想到的所有内容,如果您对MVVM或上述任何其他要点有任何疑问,请回复。

答案 1 :(得分:4)

1)你应该拥有2个Windows,这看起来像我将monitor2作为monitor1的子窗口(毕竟,它是一个孩子;)
我的意思是,App.xaml中的StartupUri应该指向monitor1,而在monitor1的构造函数中,你应该创建一个monitor2的实例(如果我这样做的话,它将是一个单例)。

2)要在第二个屏幕上最大化窗口: 订阅窗口的Loaded事件(在代码隐藏中),并设置

private void Window_Loaded(object sender, RoutedEventArgs e) {
            WindowState = WindowState.Maximized;
        }

更多信息(和来源):here

3)关于如何在monitor1中设置内容时使monitor2做出反应,使monitor1和monitor2绑定到同一个ViewModel,只显示不同的内容。

希望这有帮助!