WPF导航(二)
项目中常会需要动态保存导航信息,比如:一个页面有一个输入框,当输入框输入内容改变后,能保存当前页面的状态,能点击“回退”按钮回到以前的输入状态。具体的实现如下:
一、日志(journal)
Navigation都记录在日志中,WPF提供了操作日志的方法:
1.RemoveBackEntry()
2.AddBackEntry(JournalEntry)
二、动态保存导航
1.定义JournalEntry,主要定义Entry、Replay处理方法,代码简短的例子如下:
[Serializable]
public class CustomEntry : CustomContentState{
public string Text = string.empty;
public Action<CustomEntry > ReplayCallback;
public override void Replay(NavigationService service, NavigationMode mode){
ReplayCallback(this);
}
}
2.Page实现IProvideCustomContentState接口,代码简短的例子如下:
public CustomContentState GetContentState()
{
return new CustomEntry()
{
Text = this.textBox1.Text,
ReplayCallback = (obj) => { this.textBox1.Text = obj.Text; }
};
}
3.Page中保存CustomContentState
NavigationService nav = NavigationService.GetNavigationService(this);
nav.AddBackEntry(GetContentState());
三、动态删除导航信息
1.删除导航信息的API
NavigationService nav = NavigationService.GetNavigationService(this);
JournalEntry entry = nav.RemoveBackEntry();
2.怎么判断删除的是哪条导航信息
JournalEntry entry = nav.RemoveBackEntry();
entry.Source.toString():.xaml文件的路径
entry.Name:名称