2

我无法在 WPF 中使用多个窗口并使用按钮在它们之间切换。理论上,我的应用程序应该有 2 个按钮,一个前进一个后退,分别将窗口更改为上一个和下一个窗口。

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

这是我的窗口的代码:

第一个窗口

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();
    }
}

提前致谢

4

2 回答 2

4

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

private void btnForward_Click(object sender, RoutedEventArgs e)
{
    var p2 = new Presentation_2();
    this.Close();
    p2.Show();
}
于 2013-03-19T11:10:32.580 回答
1

当您创建一个窗口时,您会创建另外两个窗口

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();
    }
}
于 2013-03-19T11:10:46.953 回答