博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

WPF导航(二)

Posted on 2012-02-10 12:19  十一郞  阅读(856)  评论(0编辑  收藏  举报

项目中常会需要动态保存导航信息,比如:一个页面有一个输入框,当输入框输入内容改变后,能保存当前页面的状态,能点击“回退”按钮回到以前的输入状态。具体的实现如下:

 

一、日志(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:名称