【问题标题】:wpf dual monitor application?wpf双显示器应用?
【发布时间】:2014-08-30 07:48:52
【问题描述】:

我对 WPF 很陌生。我想创建一个双显示器/投影仪应用程序。我想要做的是在一台显示器上有“演示者屏幕”,在辅助显示器上有另一个面板,类似于 powerpoint 的工作方式。我正在努力将注意力集中在面板和 XAML 上。所以我想要的是用户点击 screen1 上的一个按钮,然后在 screen2 上更新信息。

我正在使用此代码:

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

设置屏幕的宽度和高度。

编辑:

后面的目标是让 screen2 根据 screen1 上的选择从数据库中检索项目

问题:教程、要去的地方、关于如何通过监视器 1 上的按钮更新监视器 2 的提示

【问题讨论】:

  • 你想通过设置宽度/高度来达到什么目的?
  • @Baboon 只是为了让应用程序占据两个屏幕。有没有更好的办法?也许两个窗口?
  • 我正在尝试做同样的事情,您是否能够在两个单独的屏幕上使用两个单独的窗口启动应用程序?如果可以,可以分享一下吗?
  • 是的,我是。问题是我无法获得第二台显示器的分辨率。我面前没有代码。我会尝试找到它并发布更新

标签: wpf multiple-monitors


【解决方案1】:

简答

创建一个在两个视图之间共享的视图模型;将其中一个视图设置为 master(进行更改)和另一个纯演示文稿。视图是新窗口。最初不要关心窗口位置(我们稍后会谈到),只需让共享视图模型工作即可。

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

长答案

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

  • 全屏模式

    至少你会希望演示窗口是全屏的。为此,您将WindowStyle 设置为None 并将AllowsTransparency 设置为True

    如果您想让第二个窗口也全屏显示,您可能需要进行一些 Win32 覆盖以使窗口在不覆盖任务栏的情况下正确最大化(如果您想知道如何执行此操作,请发表评论)。

  • 检测多个监视器

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

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


这就是我现在能想到的全部内容,如果您对 MVVM 或上述任何附加点有任何疑问,请回帖。

【讨论】:

  • 这已经给了我足够的力量将我推向正确的方向。对未来阅读的建议?
  • 很高兴听到这就是我的意图。只需先学习 ModelView-ViewModel (MVVM) 模式,因为这不是此应用程序的良好基础,但对于未来的应用程序也是如此。关于这个主题有很多从中级到高级的文章,但是如果您想要具体的建议,请查看 Josh Smith (joshsmithonwpf.wordpress.com) 撰写的系列文章。
  • 您无需将 AllowsTransparency 设置为 True 即可全屏显示(您只需要将桌面显示出来)。将 WindowStyle 设置为 None 然后最大化就足够了。
【解决方案2】:

1) 你应该有 2 个窗口,看起来我会让 monitor2 成为 monitor1 的子窗口(毕竟,它是一个子窗口;)
我的意思是,App.xaml 中的 StartupUri 应该指向 monitor1,并且在 monitor1 的构造函数中,您应该创建一个 monitor2 的实例(如果我要这样做,这将是一个单例)。

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

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

更多信息(和来源):here

3) 至于monitor2在monitor1中设置的时候如何做出反应,让monitor1和monitor2绑定到同一个ViewModel,只是显示的东西不同。

希望这会有所帮助!

【讨论】:

  • 感谢您的帮助。我希望我能接受多个答案,但是@Dennis Roche 的答案解释得更多。
猜你喜欢
  • 2012-11-21
  • 1970-01-01
  • 2010-10-05
  • 2013-06-24
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多