2010-10-12 32 views
5

Bất cứ khi nào chương trình của tôi được đóng qua tombstoning, khi nó được kích hoạt lại tôi muốn ứng dụng Điều hướng trở lại màn hình bắt đầu.Điều hướng trong Ứng dụng Kích hoạt Windows Phone 7 (Tombstoning)

Tôi muốn làm điều gì đó như thế này

private void Application_Activated(object sender, ActivatedEventArgs e) { NavigationService.Navigate(new Uri("/Start.xaml", UriKind.Relative));
}

nhưng nó không hoạt động. Cảm ơn, Shureman.

Trả lời

5

Đó không phải là hành vi được chấp nhận chung quanh tombstoning. Kỳ vọng là ứng dụng sẽ trả về chính xác như khi người dùng rời đi. Hãy nhớ rằng tombstoning có thể là kết quả của một thứ khác ngoài hành động do người dùng khởi tạo trong ứng dụng. Ví dụ, với tư cách là một người dùng, tôi sẽ không muốn một ứng dụng quên tất cả thông tin tôi đã nhập và trở lại màn hình trước đó chỉ vì tôi đã trả lời một cuộc gọi điện thoại.

Nếu bạn thực sự muốn làm điều này, làm thế nào nó có thể được thực hiện sẽ phụ thuộc vào cấu trúc của ứng dụng của bạn và hệ thống phân cấp điều hướng.

Đặt cược tốt nhất của bạn có thể là xây dựng hệ thống điều hướng của riêng bạn.
Nếu bạn muốn sử dụng ngăn xếp được tích hợp sẵn. Sự kiện Application_Activated của bạn có thể đặt cờ toàn cầu mà tất cả các trang sẽ nhận trong sự kiện OnNavigatedTo của họ và sau đó trả lời bằng cách điều hướng ngược. Điều hướng ngược này có thể sẽ hiển thị (nếu chỉ một thời gian ngắn) cho người dùng và tạo ra trải nghiệm ít hơn mong muốn.

Cập nhật
Đó là bây giờ có thể làm điều gì đó như thế này bằng cách sử dụng Non-Linear Navigation Service.

2

Tôi là Matt thứ hai, đó không phải là hành vi được đề xuất theo nguyên tắc MSFT. WP7 người dùng sẽ mong đợi các ứng dụng được ngôi mộ ném đá đúng cách.

Và nếu bạn vẫn còn nghiêm ngặt khi thực hiện việc này thì đây là cách: Sử dụng NavigationService.GoBack() nhiều lần khi bạn điều hướng. Về mặt kỹ thuật WP7 giữ tất cả chuyển tiếp trang bạn đã thực hiện trong hệ thống và bạn có thể lập trình để quay lại trang chủ. Bạn có thể cần phải đợi sự kiện NavigationCompleted sau đó gọi GoBack tiếp theo() và gọi cho đến khi NavigationService.CanGoBack là sai, sẽ là trang chủ của bạn :)

0

Như @Matt Lacey đã nói, điều này gần như chắc chắn là một cái gì đó bạn không nên làm: và có thể bạn sẽ rơi hôi của thị trường certification guidelines thêm:

5.2.3 ứng dụng năng đáp ứng sau khi bị ngừng hoạt động

Một ứng dụng Windows Phone được ngừng hoạt động khi người dùng nhấn Nút bắt đầu hoặc nếu hết giờ thiết bị làm cho màn hình khóa tương tác. A Ứng dụng Windows Phone cũng bị vô hiệu hóa khi nó gọi Trình khởi chạy hoặc API trình chọn. Khi được kích hoạt, thời gian khởi chạy ứng dụng phải đáp ứng các yêu cầu trong Mục 5.2.1.

Microsoft khuyến cáo rằng việc áp dụng thiết lập lại tình trạng ứng dụng mà người dùng kinh nghiệm trước khi ứng dụng đã được ngừng hoạt động. Để biết thêm thông tin, hãy xem xem Tổng quan về mô hình thực hiện cho chủ đề Windows Phone.

Bạn sắp xếp loại ứng dụng nào? Thật khó để thực hiện cuộc gọi về việc liệu việc quay lại màn hình bắt đầu có phù hợp hay không mà không biết thêm một chút về nó hoặc ngữ cảnh của chương trình.

+0

Để tham khảo, nhiều ứng dụng (đặc biệt là trò chơi) có sẵn trên thị trường không tái lập trạng thái sau khi bị vô hiệu hóa. Đây là một đề xuất, không phải là một quy tắc. Nhưng có, với tư cách là người dùng, nó rất bực bội khi một ứng dụng không lưu trạng thái. –

0

Chúng tôi đã gặp phải vấn đề tương tự khi chuyển đổi dự án cũ và cần thiết để có một số quyền tự do với việc làm kinh ngạc. Tất cả chúng ta đều tương đối mới đối với nền tảng này nên hãy lấy lời khuyên này bằng một hạt muối. Trang khởi động của chúng tôi là SplashPage.xaml. Chúng tôi sử dụng các UriMapper để chuyển hướng từ các nguồn hiện lần cuối:

private void Application_Activated(object sender, ActivatedEventArgs e) { 
     IsTombstoned = ! e.IsApplicationInstancePreserved; 

     if (IsTombstoned) { 
      //the os wants to return to the last page, but we want it to restart to our splash page 
      RootFrame.UriMapper = new RestartUriMapper(); 
     } 
    } 

này chuyển hướng đến các SplashPage.xaml và sau đó chúng tôi chuyển hướng khác để xóa rằng trang cuối cùng mà hệ điều hành muốn đi (có thể là duy nhất để chúng tôi thực hiện chuyển hướng.)

protected override void OnNavigatedTo(NavigationEventArgs e) { 
     base.OnNavigatedTo(e); 

     if (NavigationContext.QueryString.ContainsKey("restart")) { 
      var app = Application.Current as App; 
      //a page redirect mapper was installed to get here from tombstone - reinstate the AssociationUriMapper now 
      app.RootFrame.UriMapper = App.Root.AssociationUriMapper; 

      //from tombstone, the last current nav source is still state, so force an initial navigation back to 
      //a new instance of this splash page and proceed start up from there 
      App.PageNavigation.Navigate(@"/Pages/SplashPage.xaml?fromtomb=true"); 
     } 
    } 


class RestartUriMapper : UriMapperBase { 
    Uri restartUri; 

    public RestartUriMapper() { 
     restartUri = new Uri(string.Format("/Pages/SplashPage.xaml?restart={0}", true.ToString()), UriKind.Relative); 
    } 

    public override Uri MapUri(Uri uri) { 
     if (restartUri != null) { 
      Uri nextPageUri = restartUri; 
      restartUri = null; 
      return nextPageUri; 
     } 

     return uri; 
    } 
} 
2

Dont lắng nghe tất cả những làm nuôi tham vọng cải người trích dẫn guidlines ngáp

thử

này
private void Application_Activated(object sender, ActivatedEventArgs e) 
{ 
    RootFrame.Navigated += RootFrame_Navigated; 
} 

void RootFrame_Navigated(object sender, NavigationEventArgs e) 
{ 
    RootFrame.Navigated -= RootFrame_Navigated; 
    RootFrame.Navigate(new Uri("/TestPage.xaml", UriKind.Relative)); 
} 
Các vấn đề liên quan