WPF父窗口&子窗口互动

时间:2015-02-21 15:24:22

标签: c# wpf

我首先打开一个窗口(让它称之为window1),然后从这个父窗口打开两个子窗口。现在我想关闭窗口2和3关闭窗口1(即他们已完成工作)。

我尝试在父窗口中调用任一子窗口的窗口关闭事件时的方法,并且我维护一个静态变量以确保两个窗口都关闭。事情是,虽然正在调用该方法,但我无法关闭父窗口。

所以请解释如何做到这一点。

我的代码:

//Parent window Creating child windows
private void button_Click(object sender, RoutedEventArgs e)
{
   Window2 w2= new Window2();
   Window3 w3= new Window3();
   w2.Show();
   w3.Show();
}
// Calling the parent window method upon window closeevent from child windows

private void Window_Closed(object sender, EventArgs e)
{
    Window1 w1=new Window1(); 
    w1.method1();              
}
// parent window method

private void method1()
{
    count++; //global static var
    MessageBox.Show("BUT THIS GETS DISPLAYED");
    if (count==2)
    {
        this.Close(); // doesnt work;
    }
}

1 个答案:

答案 0 :(得分:0)

你的代码没有在课程中列出,所以很难说,但是我假设windows_closed代码在子窗口中?如果不是,您缺少在父窗口代码中订阅子窗口关闭事件。

问题是你正在创建一个Window1的新实例来调用method1 - 因此计数只会达到一个。

一种简单的方法是将method1设为静态,因此您不需要从子窗口创建一个Window1实例来调用它。

试试这个

//this should be in Window1.cs
public static void method1()
{
count++;//global static var
MessageBox.Show("BUT THIS GETS DISPLAYED");
if(count==2)
{
this.Close(); // doesnt work;
}
}

//this should be in childwindow.cs
private void Window_Closed(object sender, EventArgs e)
{
    Window1.method1();              
}

注意 - 将方法设置为静态可能不是最好的方法 - 但我假设你对此很陌生,所以它会在你学习的时候做到。

相关问题