多窗口问题 - C#WPF

问题描述:

我无法在WPF中使用多个窗口,并使用按钮在它们之间切换。从理论上讲,我的应用程序应该有两个按钮,一个向前和一个向后,分别将窗口更改为上一个窗口和下一个窗口。多窗口问题 - C#WPF

不幸的是,我得到了一个Stackoverflow错误,通过我的研究,我觉得它与我创建新窗口时创建窗口时创建上一个窗口时再次创建窗口,从而使一个可怕的循环。但是,我不知道我可以在哪里放置窗口创建代码来阻止此问题,或者是否有其他方法来解决此问题。

这里是我的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(); 
    } 
} 

在此先感谢

+0

为什么不使用内置的导航框架? http://msdn.microsoft.com/en-us/library/ms750478.aspx – Dennis 2013-03-19 11:12:38

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

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

谢谢你,这似乎工作正常,我不知道为什么我没有想到在这里创建它。 – ErrorOperator 2013-03-19 11:15:40

当你创建一个窗口,为您打造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(); 
    } 
} 
+0

谢谢,这也似乎工作! – ErrorOperator 2013-03-19 11:16:14