无法在辅助监视器中创建WPF窗口

Che*_*usk 5 c# wpf user-interface

我正在努力在应用中实现一些类似Chrome的标签功能,并且在使新实例正确生成时遇到一些麻烦.我已经做了很多搜索和迭代各种解决方案,但还没有能够在第二台显示器上生成一个新的窗口.

这是使用线程:

  1. 打开文件
  2. 将当前选项卡拖到其他监视器
  3. 新的应用程序实例在其中设置了该选项卡,在用户将选项卡拖动到的位置生成.

断开连接在步骤3中.新实例始终在主监视器上生成.

所以,一些代码可以扩展问题.

namespace app {
    public class AppView {
      public void OpenInNewWindow()
      {
        // Create a new viewmodel
        var appViewModel = new AppVM();

        //// On my machine this returns the correct screen "DISPLAY2".  The Top and Left properties are 0 and 1680, respectively.
        var targetScreen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);

        ////So we can set the position of the new view
        var appView = new AppView(appViewModel);

        //This seats the currently selected data tab inside the new AppViewModel
        RelocateSelectedViewModel(appViewModel);

        appView.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual;
        appView.Top = targetScreen.WorkingArea.Top;
        appView.Left = targetScreen.WorkingArea.Left;
        appView.Show();
        // Have to maximize after we Show() or it won't appera on secondary monitors according to THE INTERNET!
        appView.WindowState = System.Windows.WindowState.Maximized;
        appView.Focus();            
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我应该提到我在第二个屏幕上没有问题.上面代码中的targetScreen正确找到我想要的屏幕,并且新窗口的Top和Left值分别正确设置为0和1680.只是AppView.Show()命令(实际上是Window.Show())在主屏幕上创建窗口.

我把这个相同的代码带到了一个独立的项目中并且它已经工作了,这使我相信我的新appView和当前覆盖我的集合的appView之间存在某种联系.以前有人遇到过这个问题吗?

Sli*_*SFT 4

您尝试过使用WinformsScreen.FromControl吗?请参阅此帖子

你可以从这篇文章中尝试这个技巧:

appView.SourceInitialized += (_, __) => appView.WindowState = WindowState.Maximized;
appView.Show();
Run Code Online (Sandbox Code Playgroud)