1.先看下页面之间导航的事件,下图
这3个事件是从Page里边的虚方法,可以通过F12查看:
所以我们只需要在导航到的页面上重写这3个方法,我在myPage页面重写了这3个方法:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
MessageBox.Show("已经离开我的主页");
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
MessageBox.Show("来到我的主页面");
}
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
MessageBox.Show("正在离开我的主页");
}
执行顺序可以看运行效果
那如何在页面之间穿值呢,其实页面之间的传值,和web传值基本一样,格式: /Page ? key = value ( / 这是根目录 ,Page是要导航到的页面 ?后边就是要传的值 ,传多个值,就用&隔开)
比如: this.NavigationService.Navigate(new Uri("/MyPage.xaml?id=123&name=wz",UriKind.Relative)); 这是导航到MyPage页面
我们在MyPage页面在 OnNavigatedTo 方法中 可以这样取值: this.NavigationContext.QueryString["id"] , this.NavigationContext.QueryString["name"]
如果需要传递多个值,像 /Page ? key = value & key1=value1 & ..... 这样写会比较麻烦 ,且不易于管理,这时我们就用到了URI映射 ,看下图介绍:
这个像MVC中的路由,路由中的解析规则
这就是那个解析规则
private void SetUriMapping()
{
if (RootFrame != null)
{
UriMapper mapper = new UriMapper();
UriMapping mappingmypage = new UriMapping();
mappingmypage.Uri = new Uri("/mypage/{id}/{name}", UriKind.Relative);
mappingmypage.MappedUri = new Uri("/MyPage.xaml?id={id}&name={name}", UriKind.Relative);
mapper.UriMappings.Add(mappingmypage);
RootFrame.UriMapper = mapper;
}
}
在导航到另一个页面就可以这样写:
string url = string.Format("/mypage/{0}/{1}", 12, "wz");
this.NavigationService.Navigate(new Uri(url, UriKind.Relative));
在MyPage.xaml页面,接受数据,也是用
NavigationContext.QueryString 取值
3022

被折叠的 条评论
为什么被折叠?



