2013-03-19 81 views
2

我無法在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

回答

4

不要創建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

1

當你創建一個窗口,爲您打造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