最近在处理一个功能:在page页面加载时导入已有配置,在page页面被关闭时也要相应更新修改过的配置。
初步解决方案,当然是响应此page的loaded事件和unloaded事件,如下:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
string strXmlFile = Environment.CurrentDirectory + "\\Config.xml";
GetConfig(strXmlFile);
}
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
string strXmlFile = Environment.CurrentDirectory + "\\Config.xml";
if (!File.Exists(strXmlFile))
{
SetConfig(strXmlFile);
return;
}
else
{
UpdateConfig(strXmlFile);
}
}
运行时发现怎么都进不了unloaded事件。
百度时(https://zhidao.baidu.com/question/411457420.html)才知道:Window在Closing的时候,是不会去触发它的子元素的Unloaded 事件。
好吧,那只好写个扩展,在Dispatcher.StartedShutdown处理。代码如下:
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
Dispatcher.ShutdownStarted += OnDispatcherShutdownStarted;
}
private void OnDispatcherShutdownStarted(object sender, EventArgs e)
{
string strXmlFile = Environment.CurrentDirectory + "\\Config.xml";
if (!File.Exists(strXmlFile))
{
SetConfig(strXmlFile);
return;
}
else
{
UpdateConfig(strXmlFile);
}
}
调试,在关闭窗口时,能进入Dispatcher.StartedShutdown的响应函数。