【问题标题】:WPF - Go back to first window from second windowWPF - 从第二个窗口返回到第一个窗口
【发布时间】:2019-11-01 14:28:19
【问题描述】:

我有一个MainWindow 页面和一个LoadingWindowMainWindow 有一个可自行关闭并打开 LoadingWindow 的按钮。我想要的是当用户关闭加载窗口以作为新实例返回主窗口时。

MainWindow.xaml.cs

   private void Button_Click(object sender, RoutedEventArgs e)
   {
       LoadingWindow load = new LoadingWindow(calibration , "MainWindow" , this);
       Mouse.OverrideCursor = null;
       Application.Current.MainWindow.Close();
       load.ShowDialog();  //  Exception is here the next time it is called
   }

LoadingWindow.xaml.cs

private void Close_Button(object sender, RoutedEventArgs e)
{
     MainWindow main = new MainWindow();
     this.Close();
     main.ShowDialog();
}

现在,当我尝试关闭加载窗口并按下 Button_Click 时,load.ShowDialog() 会显示以下错误,尽管我正在声明它的新实例。


System.InvalidOperationException: Cannot set Visibility or call Show, ShowDialog, or WindowInteropHelper.EnsureHandle after a Window has closed

我读到您在关闭窗口后无法打开窗口,但我有一个不会出现此问题的新实例。

【问题讨论】:

  • WPF 有一个主窗口的概念。让我们将其作为起始窗口的别名。通常起始窗口是主窗口的一个实例。当您关闭启动窗口时,应用程序将关闭。这意味着当你得到这个工作时你会遇到另一个问题。你可以设置主窗口是什么,你可以改变行为,但也许你的设计是这里的问题。也许你可以在加载完成后 .Hide() mainwindow 然后 .Show() 它。或者,如果您在主窗口而不是单独的窗口中显示加载动画/其他内容,可能会更简单。

标签: c# wpf


【解决方案1】:

在您的主窗口中不要使用Application.Current.MainWindow 实例,而是使用this.Close()

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        LoadingWindow load = new LoadingWindow(...);
        Mouse.OverrideCursor = null;
        //Application.Current.MainWindow.Close();
        this.Close();
        load.ShowDialog();  //  Exception is here the next time it is called
    }

请参阅此 threadthis 以了解差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多