2010-12-14 28 views
13

Tôi có schema ứng dụng này:Di chuyển một trang từ Navigation stack

[List Page] -> [Detail Page] -> [ShareOnFacebook Page] 
        ^__________________| 
  1. Người dùng chọn một Item trong [List Page]
  2. Người dùng có thể hoặc không có thể bấm một nút Share nếu anh ta hoặc cô ấy , ứng dụng điều hướng đến một [ShareOneFacebook page] hiển thị Biểu mẫu đăng nhập Facebook, đăng thông báo và điều hướng trở lại
  3. Người dùng điều hướng trở lại.

Nếu người dùng chia sẻ trên facebook, nó sẽ "đăng lại" tin nhắn, vì ứng dụng lưu phiên để nó sẽ quay lại ShareOnFacebook, sau đó quay lại trang Chi tiết của tôi.

Nếu người dùng không chia sẻ, anh ấy quay lại Trang danh sách.

Làm cách nào để "ommit" trang ShareOnFacebook trong ngăn điều hướng của tôi?

+0

nó hoạt động, nhưng nó hoàn toàn hack. Tôi thích mô hình Android có thể gọi kết thúc và sau đó di chuyển, hoạt động độc đáo – xximjasonxx

Trả lời

27

Hãy thử cách này: Gọi NavigationService.RemoveBackEntry(); theo phương thức OnNavigatedTo. Thao tác này sẽ xóa trang trước đó khỏi ngăn xếp. Theo tôi, thủ thuật với Navigation.GoBack(); không thỏa mãn vì nó hiển thị trang cần xóa trong một thời gian ngắn.

Lưu ý: Chỉ hoạt động với hệ điều hành Windows Phone 7.1 (Mango) SDK

+1

Cảm ơn, tôi đã thay đổi câu trả lời được phê duyệt. Câu hỏi ban đầu của tôi là trước khi Mango, nhưng tôi hình người mới sẽ cần câu trả lời này ngay bây giờ –

3

Tôi có tình huống tương tự trong ứng dụng của mình, tôi giải quyết nó bằng một giải pháp rất đơn giản.

Nếu bạn muốn "bỏ qua" một trang trong backstack của bạn, hãy đặt một số logic trong hàm NavigatedTo() của trang đó.

Ví dụ: bạn có thể có một bool mà bạn đặt thành true khi bạn đăng lên facebook, và sau đó đặt mã sau trong hàm NavigatedTo() của trang ShareOnFacebook.

Đây là mã giả:

if (alreadyPosted) Navigation.GoBack();

Các GoBack() chức năng sẽ bỏ qua trang này và trở về trước đó, người dùng sẽ không bao giờ thấy trang.

0

tôi đăng một ví dụ cho cùng một vấn đề here.

Các phi tuyến Navigation Dịch vụ Matt liên quan đến bản chất làm điều tương tự nhưng sẽ có lẽ tốt hơn ví dụ đơn giản của tôi.

1

tôi sử dụng phương pháp removeBackEntry trên NavigationService Class.Tôi cũng sử dụng như là một cách để thiết lập màn hình splash của riêng tôi

 private void BWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     // switch screen 
     NavigationService.Navigated += new NavigatedEventHandler(NavigationServiceNavigated); 
     NavigationService.Navigate(new Uri("/Pages/main.xaml", UriKind.Relative)); 

    } 

    void NavigationServiceNavigated(object sender, NavigationEventArgs e) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 
3

Có một cái nhìn tại thư viện đơn giản tôi đã viết cho các mục đích như: http://navcoerce.codeplex.com/

var fluent = new FluentNavigation(RootFrame);       

fluent.WhenNavigatedTo<MainPage>()          
     .ThenTo<LoginPage>()            
     .ThenToAnyPage()             
     .RemoveEntriesFromBackStack(1);         

fluent.WhenNavigatedTo<MainPage>()          
     .ThenTo<LoginPage>()            
     .ThenTo<RegisterPage>()           
     .ThenTo<PaymentPage>()           
     .RemoveEntriesFromBackStackTill<MainPage>();      

fluent.WhenNavigatedTo<MainPage>()          
     .ThenTo<SecondPage>()            
     .ThenTo<RegisterPage>()           
     .ThenOptionallyTo<ForgotPasswordPage>()       
     .ThenToAnyPage()             
     .RemoveEntriesFromBackStackTill<MainPage>();      

fluent.WhenNavigatingTo<PaymentPage>()         
     .RedirectTo<LoginPage>();           

fluent.WhenNavigatingTo<PaymentPage>()         
     .If(() => false)             
     .RedirectWithReturnUri<LoginPage>("ReturnUri"); 
+0

Xin chào, dự án vẫn còn sống? –

+0

Vitalii, hiện tại tôi không phát triển cho WP nên tôi không thực hiện bất kỳ thay đổi nào đối với thư viện. Nhưng cảm thấy tự do để ngã ba dự án, tôi sẽ chấp nhận bất kỳ thay đổi nào có thể giúp bạn và những người dùng khác. – Grigory

+0

Có thể một chút sau - bây giờ tôi đang tìm giải pháp đã được chứng minh để xử lý điều hướng. Tôi có rò rỉ trục chính, và khi điều hướng trên nó, tôi có 2 lượt xem. Bằng cách nào đó, sử dụng thông thạo không giúp đỡ trong trường hợp của tôi. –

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