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,只显示欢迎页。

 

posted @   0Behavior  阅读(3376)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示