2010-06-30 10 views
1

실버 라이트 애플리케이션에서 이미 방문한 페이지를 캐싱하는 방법을 알아 내려는 데 문제가 있습니다. 과 같이 내가의 URI의 배열이 선언이 :실버 라이트 페이지 캐싱

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 
: 나는 페이지에 탐색 프레임을 가지고 있고 내가 지금처럼 탐색을 처리

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

(탐색 템플릿 페이지의 프레임 객체입니다)

URI에 대한 후속 탐색에서 페이지를 다시 작성하지 않는 방법을 찾고 있습니다. URI-> nav.Content이지만 nav.Content의지도를 유지하고이 캐시를 기반으로 navs 콘텐츠를 설정한다고 생각했습니다. 어떤 아이디어?

답변

1

원래 게시물이 불완전하기 때문에 UriUserControl 상속 된 UserControl을 포함하는 것을 잊었고 각 xaml의 루트 요소는 UserControl입니다.

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 

나는 (또한 XAML 페이지의에에서 UserControl의 변경) System.Windows.Controls.Page 대신 UserControl을을 사용하려면이 구현을 변경했습니다. 이를 통해 프레임에서 NavigationService의 캐싱 기능을 사용할 수 있습니다.이 캐싱 기능을 사용하면 캐싱이 가능할뿐 아니라 브라우저에서 애플리케이션의 앞뒤 버튼을 사용할 수 있습니다.