WPF Frame 关闭所有Page页


需求:当前frame已经打开了很多page,除了首页welcome其他page都要关闭

分析:frame提供了RemoveBackEntry方法,但是仅限于删除回退部分,如果当前页到历史导航中间或者第一页,会导致无法清除历史导航,所以思路是让frame回到最前页,也就是CanGoForward必须为false,代码如下:

1                     while (this.Frame.CanGoForward)
2                     {
3                         this.Frame.GoForward();
4                     }

通过不停的调用GoForward(),实现frame回到最前页,然后执行RemoveBackEntry,但是有个问题,如下图

 

当前页如果是权限管理,清空导航历史后,当前页权限管理还是显示,如果当前选择的欢迎页,没有问题,只会留下欢迎页,国内外并没有相关资料处理这种情况,为了实现目标,

想了一个方案:首先让frame回到最前页,然后跳转到欢迎页,然后关闭所有。但是问题还是有,代码如下

 1  while (this.Frame.CanGoForward)
 2 {
 3     this.Frame.GoForward();
 4 }
 5 var entry = this.Frame.RemoveBackEntry();
 6  while (entry != null)
 7 {
 8     entry = this.Frame.RemoveBackEntry();
 9 }
10 this.Frame.Navigate(new Uri("View/Main/Views/Welcome.xaml", UriKind.RelativeOrAbsolute));

可是出现个问题,frame来不及跳转到welcome,就已经执行完了清楚导航历史,哪怕把

this.Navigate(new Uri("View/Main/Views/Welcome.xaml", UriKind.RelativeOrAbsolute));

放在第一行 while (this.Frame.CanGoForward)之前都不行,仔细翻看了一个 Frame官方文档,如下图

 

 

 于是想到可以在LoadCompleted之后执行清除导航历史操作,毕竟LoadCompleted保证了page加载完成,

总结实现思路:首先让frame回到最前页,然后跳转到欢迎页,等LoadCompleted完成后执行清除导航历史操作(注意:并不是所有的LoadCompleted都清除导航历史,否则后果就是你永远只有欢迎页,其他页刚打开就被关了)

1                     while (this.Frame.CanGoForward)
2                     {
3                         this.Frame.GoForward();
4                     }
5                     this.Frame.LoadCompleted += Frame_LoadCompleted;//添加清除操作
6                     this.Frame.Navigate(new Uri("View/Main/Views/Welcome.xaml", UriKind.RelativeOrAbsolute));
1         private void Frame_LoadCompleted(object sender, NavigationEventArgs e)
2         {
3             var entry = this.Frame.RemoveBackEntry();
4             while (entry != null)
5             {
6                 entry = this.Frame.RemoveBackEntry();
7             }
8             this.Frame.LoadCompleted -= Frame_LoadCompleted;//完成清除导航后,删除清除操作
9         }

总结:不管当前导航打开的什么页,以及导航位置不管在哪,都会清除所有page,只显示欢迎页。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM