多窗口问题 – C#WPF

我有麻烦在WPF中使用多个窗口,并使用button之间切换。 从理论上讲,我的应用程序应该有两个button,一个向前和一个向后,分别将窗口更改为上一个窗口和下一个窗口。

不幸的是,我得到一个Stackoverflow的错误,通过我的研究,我觉得它有一些与我创build新的窗口,创build窗口时创build前一个窗口,从而使一个可怕的循环再次。 不过,我不知道在哪里可以把窗口创build代码停止这个问题,或者如果有其他方法来解决这个问题。

这里是我的Windows代码:

第一个窗口

public partial class Presenation_1 : Window { Presentation_2 p2 = new Presentation_2(); MainWindow M = new MainWindow(); public Presenation_1() { InitializeComponent(); } private void btnForward_Click(object sender, RoutedEventArgs e) { this.Close(); p2.Show(); } private void btnBack_Click(object sender, RoutedEventArgs e) { this.Close(); M.Show(); } } 

第二个窗口

 public partial class Presentation_2 : Window { Presentation_3 p3 = new Presentation_3(); Presenation_1 p1 = new Presenation_1(); public Presentation_2() { InitializeComponent(); } private void btnForward_Click(object sender, RoutedEventArgs e) { this.Close(); p3.Show(); } private void btnBack_Click(object sender, RoutedEventArgs e) { this.Close(); p1.Show(); } } 

第三个窗口

 public partial class Presentation_3 : Window { Presentation_4 p4 = new Presentation_4(); Presentation_2 p2 = new Presentation_2(); public Presentation_3() { InitializeComponent(); } private void btnForward_Click(object sender, RoutedEventArgs e) { this.Close(); p4.Show(); } private void btnBack_Click(object sender, RoutedEventArgs e) { this.Close(); p2.Show(); } } 

第四个窗口

 public partial class Presentation_4 : Window { Presentation_3 p3 = new Presentation_3(); MainWindow M = new MainWindow(); public Presentation_4() { InitializeComponent(); } private void btnForward_Click(object sender, RoutedEventArgs e) { this.Close(); M.Show(); } private void btnBack_Click(object sender, RoutedEventArgs e) { this.Close(); p3.Show(); } } 

提前致谢

Solutions Collecting From Web of "多窗口问题 – C#WPF"

在单击按钮之前不要创建Windows,可以在事件处理程序中创建它们:

 private void btnForward_Click(object sender, RoutedEventArgs e) { var p2 = new Presentation_2(); this.Close(); p2.Show(); } 

当你创建一个窗口,你创建另外2个窗口

 new Presentation_X() 

这个新的窗口是自动显示和本身打开2个其他窗口。

你可以在主窗口中创建这个窗口(自动隐藏这个窗口),在构造函数中传递引用而不关闭这些窗口。 快速示例(未测试):

 public partial class Presenation_X : Window { private Window preview; private Window next; public Presenation_X(Window w1, Window w2) { this.preview = w1; this.next = w2; InitializeComponent(); } private void btnForward_Click(object sender, RoutedEventArgs e) { this.next.Show(); this.Hide(); } private void btnBack_Click(object sender, RoutedEventArgs e) { this.preview.Show(); this.Hide(); } }