有一个函数可以打开并显示一个新窗口。我想给这个窗口关闭一个条件。我在下面写了我想要的伪代码。捕捉窗口的返回
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Show();
// Pseudo code: When (nw.Close()) {do something}
}
有一个函数可以打开并显示一个新窗口。我想给这个窗口关闭一个条件。我在下面写了我想要的伪代码。捕捉窗口的返回
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Show();
// Pseudo code: When (nw.Close()) {do something}
}
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Show();
// inline
nw.Closed += (s1, e1) => Debug.WriteLine("Closed");
// or
nw.Closed += (s1, e1) =>
{
Debug.WriteLine("Closed");
};
// or
w.Closed += OnWindowClosed;
}
private void OnWindowClosed(object s, EventArgs e)
{
Debug.WriteLine("Closed");
}
你想使用ShowDialog()。这会让你的代码等到新窗口返回。
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.ShowDialog();
//Do something when nw returns
}
或者,如果你不想你的父窗口冻结起来,那么你将有附加到Window.Closed
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Closed += nw_Closed;
nw.Show();
}
private void new_Closed(object sender, CancelEventArgs e)
{
//Do Something
}
使用lambda表达式,如果你没有,你可以使用内联委托有一个方法早已准备好,也:
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Closed += (sender, cancelEventArgs) =>
{
//Do Something
};
nw.Show();
}
问题是关于WPF不是Windows窗体 – Phil 2012-03-31 21:48:04
@Phil谢谢,我错过了,并更新了我的答案 – 2012-03-31 21:57:55
对于内联版本,它说:'名为'e'的局部变量不能在此范围内声明,因为它会给'e'赋予不同的含义,这已经是在'父或当前'范围中使用来表示别的东西' – Shibli 2012-03-31 21:59:43
@Shibli这是因为你的func已经接受了一个e参数,你将不得不命名你的lambda的东西不同。我个人更喜欢使用明确的命名(根据我的答案),以便知道变量实际是什么(不依赖于智能感知)......只是将(s,e)更改为诸如(s,eventArgs)之类的东西或其他e – 2012-03-31 22:01:41
对不起,我的'e'与RoutedEventArgs e发生冲突。改变了答案。 – Phil 2012-03-31 22:04:12