2014-05-24 19 views
6

Tôi điều hướng giữa các trang có lớp Trình trợ giúp điều hướng mà VS 2013 đã thêm khi tạo giải pháp, Nhưng trạng thái cuộn hầu hết các điều khiển (Giống như Pivot, Hub) không được lưu như trong Windows Phone 8.x Silverlight.Lưu trạng thái cuộn trong Windows Phone 8.1 khi người dùng điều hướng giữa các trang

Tôi nên làm gì để thực hiện hành vi này? Tôi có nên xử lý trạng thái cuộn của chính mình và khôi phục cuộn khi tôi quay lại trang đã truy cập không?

Cảm ơn.

UPDATE1:

Tôi cần lưu chọn mục trục/hub vv, khi tôi quay trở lại trang.

UPDATE2:

void navigationHelper_SaveState(obj sender,SaveStateEventArgs e) 
    { 
    e.PageState["SelectedSection"] = MainHub.SectionsInView; 
    } 
    void navigationHelper_LoadState(obj sender,LoadStateEventArgs e)   
    { 
     if (e.PageState != null) 
     { 
      var sections = e.PageState["SelectedSection"] as IList<HubSection>; 
      if (sections != null && sections.Any()) 
       MainHub.ScrollToSection(sections[0]); 
     } 
    } 
+0

Bạn có ý gì khi cuộn? Mục trục xoay hoặc mục trung tâm đã chọn hoặc vị trí của trình xem cuộn của các mục bên trong trục xoay hoặc hub? –

+0

Mục pivot/hub đã chọn. –

+0

Nếu bạn tạo một loại Pivot mới của dự án Windows Phone 8.1 và chạy nó như là, bạn sẽ thấy rằng nó giữ trạng thái của mục xoay được chọn khi bạn điều hướng từ trang trục đến trang mục và ngược lại. –

Trả lời

12

Trên trang mà bạn sử dụng trung tâm, thiết lập chế độ chuyển hướng bộ nhớ cache trong constructor:

this.NavigationCacheMode = NavigationCacheMode.Enabled; 

hoặc trong XAML:

<Page 
    x:Class="App.HubPage" 
    .... 
    xmlns:data="using:App.Data" 
    NavigationCacheMode="Enabled" 
    .... 
+1

Bạn tiết kiệm trong ngày của tôi, cảm ơn :) –

+0

Tôi không biết tại sao đây không phải là hành vi mặc định (đặc biệt là trên các trang trung tâm). Vui vì tôi đã tìm thấy điều này trước khi lưu/tải trạng thái thông qua NavigationHelper như tôi đã lên kế hoạch. – SimpsOff

+0

thử treo và cách này là vô dụng – LXG

1

Sử dụng tốt hơn:

this.NavigationCacheMode = NavigationCacheMode.Required; 

trước:

this.InitializeComponent(); 

Và thêm:

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    if (e.NavigationMode == NavigationMode.Back) 
    this.NavigationCacheMode = NavigationCacheMode.Disabled; 
} 

để loại bỏ bộ nhớ cache trên chuyển hướng trở lại từ trang.

+0

Đó thực sự là một thủ thuật khá thông minh. Imo tốt hơn rất nhiều so với câu hỏi hàng đầu. Cảm ơn rất nhiều! –

Các vấn đề liên quan