Che*_*usk 5 c# wpf user-interface
我正在努力在应用中实现一些类似Chrome的标签功能,并且在使新实例正确生成时遇到一些麻烦.我已经做了很多搜索和迭代各种解决方案,但还没有能够在第二台显示器上生成一个新的窗口.
这是使用线程:
断开连接在步骤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之间存在某种联系.以前有人遇到过这个问题吗?
您尝试过使用WinformsScreen.FromControl
吗?请参阅此帖子。
你可以从这篇文章中尝试这个技巧:
appView.SourceInitialized += (_, __) => appView.WindowState = WindowState.Maximized;
appView.Show();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3958 次 |
最近记录: |