我无法在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();
}
}
提前致谢
答案 0 :(得分:4)
在单击按钮之前不要创建Windows,您可以在事件处理程序中创建它们:
private void btnForward_Click(object sender, RoutedEventArgs e)
{
var p2 = new Presentation_2();
this.Close();
p2.Show();
}
答案 1 :(得分:1)
创建窗口时,使用
创建其他2个窗口new Presentation_X()
这个新窗口是自动显示的,并且自己打开另外两个窗口。
您可以在主窗口中创建一次此窗口(自动隐藏此窗口),在构造函数中传递引用而不关闭这些窗口。快速示例(未经测试):
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();
}
}