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:名称

posted @ 2011-12-22 23:52  罗虎  阅读(1023)  评论(0编辑  收藏  举报