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,只显示欢迎页。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!