2010-06-30 225 views
1

我很難找出如何緩存已在我的silverlight應用程序中訪問過的頁面。我的URI的陣列聲明像這樣:silverlight頁面緩存

let pages : UriUserControl array = [| 
     new Module1.MyIdeas() :> UriUserControl ; 
     new Module1.Page2() :> UriUserControl ; 
     new Module1.Page3() :> UriUserControl ; 
     new Module1.Page4() :> UriUserControl ; 
     new Module1.Page5() :> UriUserControl ; |] 

我有頁面上的導航框架和予處理導航像這樣(NAV是模板頁面上的Frame對象):

member this.navigate (ea: SelectedMenuItemArgs) = 
     let i = ea.Index 
     if i <= pages.Length then   
      let page = (pages.[i-1] :> INamedUriProvider) 
      nav.Navigate(page.Uri) |> ignore 
      pageTitle.Text <- page.ProviderName 

我正在尋找一種避免在後續導航到URI時重新創建頁面的方法。我想保留一個URI的地圖 - >導航。內容,但導航。內容和基於這個緩存設置導航內容。有任何想法嗎?

回答

1

我原來的帖子是不完整的,我忘了包括UriUserControl繼承UserControl和每個xaml的根元素是UserControl ie;

type UriUserControl(uriStr, name) as this = 
    inherit UserControl() 
    member this.uri = new System.Uri(uriStr, UriKind.Relative) 
    member this.providerName = name 
    interface INamedUriProvider with 
     member this.Uri with get() = this.uri 
     member this.ProviderName with get() = this.providerName 

我改變了這種實現使用System.Windows.Controls.Page而不是用戶控件(也改變了用戶控件的頁的在XAML)。這使框架可以使用NavigationService的緩存功能,它不僅可以緩存,還可以在應用程序內啓用瀏覽器後退和前進按鈕。