在我的View文件夹中,我有MainWindow和GameWindow,在我的ViewModel文件夹中,我有MainWindowViewModel和GameWindowViewModel。我正在尝试使用我的GameWindowViewModel:
1)点击ICommand和此功能
重启我的GameWindowvoid restartButtonClickFunction(object obj)
{
GameWindow gamewindow = new GameWindow();
Application.Current.GameWindow.Close();
gamewindow.Show();
}
2)点击ICommand和以下功能
再次转到我的MainWindowvoid mainMenuButtonClickFunction(object obj)
{
MainWindow mainwindow = new MainWindow();
Application.Current.GameWindow.Close();
mainwindow.Show();
}
它给了我错误,我无法找到另一种方式。在我的MainWindowViewModel中,我使用以下函数进行管理
void startButtonClickFunction(object obj)
{
GameWindow gamewindow = new GameWindow();
Application.Current.MainWindow.Close();
gamewindow.Show();
}
答案 0 :(得分:1)
评论摘要:
Application.Current.MainWindow
不是对MainWindow
课程的引用,Application
上的属性指示哪个Window
是'主',请参阅{{3 }}
这意味着没有属性Application.Current.GameWindow
。
相反,您可以使用Application.Current.Windows
获取所有当前Windows
的集合,然后比较类型以获取您要关闭的类型:
foreach (var window in Application.Current.Windows)
{
if (window is GameWindow)
{
((Window)window).Close();
}
}
或者,您可以将当前Window
存储在属性中以便轻松关闭它
答案 1 :(得分:0)
它适用于MainMenu按钮,但当我尝试使用以下代码重新启动窗口时,当前Window关闭但不会再次打开并给出以下错误:PresentationFramework中出现未处理的“System.InvalidOperationException”类型异常的.dll
附加信息:窗口关闭后,无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle。
void restartButtonClickFunction(object obj)
{
GameWindow gamewindow = new GameWindow();
foreach (var window in Application.Current.Windows)
{
if (window is GameWindow)
{
((Window)window).Close();
}
}
gamewindow.Show();
}