我正致力于在应用程序中实现一些类似 Chrome 的选项卡功能,但在正确生成新实例时遇到了一些问题。我已经对各种解决方案进行了大量搜索和迭代,但仍无法在第二台显示器上生成新窗口。
这是使用线程:
- 打开文件
- 将当前标签拖到其他显示器
- 在用户将选项卡拖动到的位置生成新的 App 实例,其中设置了该选项卡。
断开连接发生在第 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();
}
}
}
我想我应该提一下,我可以毫无问题地获得第二个屏幕。上面代码中的 targetScreen 正确地找到了我想要的屏幕,并且新窗口的 Top 和 Left 值被正确设置,分别为 0 和 1680。只是 AppView.Show() 命令(实际上是 Window.Show())在主屏幕上创建了窗口。
我已将相同的代码应用到一个独立的项目中并且它有效,这使我相信我的新 appView 与覆盖我的集合的当前 appView 之间存在某种联系。以前有人遇到过这个问题吗?
最佳答案
您是否尝试使用 Winforms Screen.FromControl
?参见 this post .
您可以从 this post 尝试这个 hack :
appView.SourceInitialized += (_, __) => appView.WindowState = WindowState.Maximized;
appView.Show();
关于c# - 在辅助监视器中创建 WPF 窗口时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362865/