我是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
答案 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,只显示不同的内容。
希望这有帮助!