📅  最后修改于: 2023-12-03 14:52:54.094000             🧑  作者: Mango
在 WPF 中,可以使用 Closing
事件来捕获关闭窗口的事件,但是该事件只在窗口本身上触发。如果想在其他窗口中监听关闭事件,可以使用以下方法:
可以在需要检测关闭事件的窗口中创建一个自定义事件,在窗口关闭时触发该事件。其他窗口可以订阅该事件并执行相应的操作。
public partial class MainWindow : Window
{
public delegate void WindowCloseEventHandler(object sender, EventArgs e);
public event WindowCloseEventHandler WindowCloseEvent;
protected virtual void OnWindowClose()
{
if (WindowCloseEvent != null)
WindowCloseEvent(this, EventArgs.Empty);
}
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
OnWindowClose();
}
}
在其他窗口中订阅事件:
private void SubscribeMainWindowCloseEvent()
{
var mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
if (mainWindow != null)
mainWindow.WindowCloseEvent += MainWindow_WindowCloseEventHandler;
}
private void MainWindow_WindowCloseEventHandler(object sender, EventArgs e)
{
// 执行相应的操作
}
可以使用 Messenger
或 EventAggregator
等消息机制来实现窗口间的通信。在需要检测关闭事件的窗口中发送消息,在其他窗口中订阅该消息并执行相应的操作。
使用 Messenger
示例:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 注册关闭事件
Closing += MainWindow_Closing;
}
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// 发送关闭消息
Messenger.Default.Send(new WindowCloseMessage());
}
}
public class WindowCloseMessage
{
// 消息类
}
public class OtherWindow : Window
{
public OtherWindow()
{
InitializeComponent();
// 订阅关闭消息
Messenger.Default.Register<WindowCloseMessage>(this, (message) =>
{
// 执行相应的操作
});
}
}
以上是两种实现方法,根据实际需求选择适合的方式。