如何在WPF中清除导航历史记录

3
我正在使用WPF的Page和NavigationWindow构建应用程序,但我根本不需要它的导航历史记录(可能选择了错误的应用程序类型?),这会导致内存泄漏。
按照此帖子所述,在每次导航之后,我都会使用NavigationService.RemoveBackEntry();进行清除。
this.NavigationService.Navigate(new MyPage());
NavigationService.RemoveBackEntry();

但是应用程序仍然会在运行时不断占用更多的内存,而且当导航栏显示时仍允许后退导航。有没有清除导航历史记录的方法?有没有比NavigationWindow+Page更适合的结构推荐?

你看过这个吗: https://dev59.com/qUrSa4cB1Zd3GeqPZ-Ph#1925192 - Aegir
2个回答

2
如Conroy在他的回答中所说,不应该使用NavigationWindow。 也许在窗口上使用TabControl更适合这个程序。
无论如何,这是一个清除导航服务中所有“之前”后退条目的解决方案:
C#:
while (NavigationService.CanGoBack) {
    try {
        NavigationService.RemoveBackEntry();
    } catch (Exception ex) {
        break;
    }
}

VB.NET:

While NavigationService.CanGoBack
    Try
        NavigationService.RemoveBackEntry()
    Catch ex As Exception
        Exit While
    End Try
End While

代码解释:
  • 当有回溯条目时,while循环将一直运行。
  • 在每次循环中,一个回溯条目被移除。
  • 当没有更多的回溯条目时,while循环退出。

-2
为什么你要使用NavigationService,如果你不需要它? 你可以使用WindowContent属性。 this.Content = new MyPage();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接