【问题标题】:screen saver function in WPF app not working well with three monitorsWPF 应用程序中的屏幕保护程序功能在三台显示​​器上无法正常工作
【发布时间】:2017-09-17 11:52:30
【问题描述】:

我有一个我一直在开发的应用程序,我构建了一些功能,以便能够启动它并让它像 PC 上的屏幕保护程序一样运行。它最大化主监视器上的主窗口,然后在所有其他监视器上打开一个黑色背景窗口。我遇到的问题是它似乎不适用于两个以上的显示器。 3 台以上的显示器,但并非所有显示器都出现停电。

启动所有窗口的代码:

foreach (Screen s in Screen.AllScreens)
{
    if (s != Screen.PrimaryScreen)
    {
        Blackout window = new Blackout();
        window.Left = s.WorkingArea.Left;
        window.Top = s.WorkingArea.Top;
        window.Width = s.WorkingArea.Width;
        window.Height = s.WorkingArea.Height;
        window.Show();
    }
    else
    {
        BigScreenScreenSaver window = new BigScreenScreenSaver();
        window.Left = s.WorkingArea.Left;
        window.Top = s.WorkingArea.Top;
        window.Width = s.WorkingArea.Width;
        window.Height = s.WorkingArea.Height;
        window.Show();
    }
}

【问题讨论】:

  • 尝试设置边界而不是工作区域

标签: c# wpf


【解决方案1】:

您需要使用边界,工作区不包括任务栏和许多其他

foreach (Screen s in Screen.AllScreens)
{
    if (s != Screen.PrimaryScreen)
    {
        Blackout window = new Blackout();
         window.Left = s.Bounds.Left;
          window.Top = s.Bounds.Top;
          window.Width = s.Bounds.Width;
           window.Height = s.Bounds.Height;
        window.Show();
    }
    else
    {
        BigScreenScreenSaver window = new BigScreenScreenSaver();
        window.Left = s.Bounds.Left;
          window.Top = s.Bounds.Top;
          window.Width = s.Bounds.Width;
           window.Height = s.Bounds.Height;
        window.Show();
    }

}

【讨论】:

  • 窗口不包含边界的定义。如果这是同一件事,我确实有 ClipTobounds?
  • 不是Windows窗体吗?
  • WPF。我正在导入 system.windows.forms 来做某些事情,但这对查找边界没有影响。
  • 尝试更改后的答案
  • 成功了。它现在显示在所有 4 台显示器上……它仍然是一种粗略的方法,因此它看起来有点奇怪,具体取决于 PC 的设置,但它现在可以工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2018-08-20
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
相关资源
最近更新 更多