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