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

时间:2015-02-15 07:18:04

标签: c# wpf

我正在使用其Page和NavigationWindow构建一个WPF应用程序,但我根本不需要它的导航历史记录(可能选择了错误的应用程序类型?),这会导致内存泄漏。

关注this post后,我在每次导航后都使用NavigationService.RemoveBackEntry();,如下所示

this.NavigationService.Navigate(new MyPage());
NavigationService.RemoveBackEntry();

但它不起作用,因为应用程序在运行时仍会占用越来越多的内存,并且在显示导航栏时仍然允许向后导航。无论如何要清除导航历史记录?对于比NavigationWindow + Page更适合的结构的建议吗?

2 个答案:

答案 0 :(得分:0)

正如Conroy在his answer中所述,不应使用NavigationWindow。
也许Window上的TabControl更适合该程序。

无论如何,这是清除NavigationService中所有“上一个”后退条目的解决方案:


C#:

function! VisualAroundDollar()
    let search = @/
    execute "normal! ?\\$\rvN"
    let @/ = search
endfunction

vnoremap a$ :<C-U>call VisualAroundDollar()<CR>
omap a$ :normal va$<CR>

VB.NET:

while (NavigationService.CanGoBack) {
    try {
        NavigationService.RemoveBackEntry();
    } catch (Exception ex) {
        break;
    }
}


代码说明:

  • 有回条目时,循环仍在运行。
  • 在每个循环中,将删除一个后退条目。
  • 没有更多后退条目时退出循环

答案 1 :(得分:-2)

如果您不需要,为什么要使用NavigationService? 您可以使用Content的{​​{1}}属性。

Window