有一個函數可以打開並顯示一個新窗口。我想給這個窗口關閉一個條件。我在下面寫了我想要的僞代碼。捕捉窗口的返回
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