在WPF上返回上一个窗口

我是WPF的新手,无法找到这个问题的答案:

我想要在3个窗口之间导航MainWindow -> Window1 -> Window2

cancel按钮上单击Window2我想返回到Window1。

我发现这个代码在2个窗口之间导航,但不是在我需要的3个窗口之间:

主窗口:

  private void Window1_Click(object sender, RoutedEventArgs e) { Window1 window1 = new Window1(); window1.Show(); this.Hide(); } 

窗口1:

  private void btn_Cancel_Click(object sender, RoutedEventArgs e) { Application.Current.MainWindow.Show(); this.Close(); } private void btn_Window2_Click(object sender, RoutedEventArgs e) { Window2 window2 = new Window2(); window2 .Show(); this.Hide(); } 

窗口2:

  private void btn_Cancel_Click(object sender, RoutedEventArgs e) { this.Close(); //what should I write to show Window1 again? } 

更改您显示窗口的方式如下:

 private void Window1_Click(object sender, RoutedEventArgs e) { Hide(); new Window1().ShowDialog(); ShowDialog(); } 

并使用DialogResult属性隐藏您的窗口(主窗口除外):

 private void btn_Cancel_Click(object sender, RoutedEventArgs e) { DialogResult = false; } 

以下是包含一组导航窗口的导航服务类的示例。

 public static class NavigationService { static NavigationService() { NavigationStack.Push(Application.Current.MainWindow); } private static readonly Stack NavigationStack = new Stack(); public static void NavigateTo(Window win) { if(NavigationStack.Count > 0) NavigationStack.Peek().Hide(); NavigationStack.Push(win); win.Show(); } public static bool NavigateBack() { if (NavigationStack.Count <= 1) return false; NavigationStack.Pop().Hide(); NavigationStack.Peek().Show(); return true; } public static bool CanNavigateBack() { return NavigationStack.Count > 1; } } 

您可以在后面的视图代码中使用它:

  public void OnNextClicked(object sender, EventArgs args) { NavigationService.NavigateTo(new Window2()); } public void OnPreviousClicked(object sender, EventArgs args) { NavigationService.NavigateBack(); } 

静态构造函数将从App.xaml StartupUri启动的主视图添加到导航堆栈作为初始视图。

如果您的应用程序日益复杂,您还可以查看棱镜导航系统等工具。