2010-09-28 27 views
9

Tôi có 3 trang trong ứng dụng của mình. Trang # 2 điều hướng trở lại trang # 1 và chuyển tiếp đến Trang # 3. Làm thế nào tôi có thể làm cho nó để điều hướng trở lại từ trang # 3 sẽ bỏ qua trang # 2 và đi trực tiếp đến # 1?Làm cách nào để xóa một trang khỏi lịch sử điều hướng?

+0

Silverlight = WP7!. Nó sẽ nhận được ít lượt xem hơn với các thẻ thích hợp. :) –

Trả lời

6

Điều tôi đã kết thúc, là kết hợp các trang # 2 và # 3 trong một trang. Khi tôi cần trang # 2, tôi sử dụng thông số điều hướng để bắt đầu trang có nội dung # 2 hiển thị, khi tôi hoàn thành # 3, tôi chỉ cần ẩn nội dung # 2.

EDIT: Trong Mango, có chức năng NavigationService.RemoveBackEntry() thực hiện chính xác những gì cần thiết.

+0

.NavigationService này luôn luôn là "null" đối với tôi, làm thế nào bạn có được xung quanh đó? – Jonny

+0

@Jonny đặt nó vào sự kiện được tải trang – EaterOfCode

0

Thay vì trang # 2 điều hướng đặc biệt để trang # 1 xem xét việc sử dụng mã này: -

NavigationService.GoBack(); 
4

Không có cách nào để đi trực tiếp từ trang # 3 trang # 1 mà không cần trải qua 2 trang #.

Tuy nhiên, bạn có thể xử lý OnNavigatedTo trong Trang 2 và nếu đến từ Trang 3 thì hãy thực hiện một cuộc gọi khác đến NavigationService.GoBack().
Cái gì như:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    if (comingFromPage3) 
    { 
    NavigationService.GoBack(); 
    } 

    base.OnNavigatedTo(e); 
} 

Có nhiều cách khác nhau mà bạn có thể theo dõi nếu đến từ trang 3 #. Tôi sẽ bị cám dỗ để đi với một biến toàn cầu để chỉ ra điều này (đặt trong trang # 3 và kiểm tra trong trang # 2).
Nếu bạn quyết định sử dụng theo dõi đơn giản bao nhiêu lần trang đã được điều hướng đến (tức là lần thứ hai trang được điều hướng đến trang phải quay lại từ # 3) hãy cẩn thận về những gì xảy ra khi bị giật khi trang hai hoặc trang # 3 được hiển thị.

+1

Công trình này, nhưng Page # 2 nhấp nháy trong một giây - Tôi không hài lòng về nó. –

2

Nếu bạn đang sử dụng nút quay lại phần cứng, thì không có cách nào trực tiếp để thực hiện việc này.

Bạn luôn có thể sử dụng phương pháp điều hướng để chuyển trực tiếp đến trang một.

NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute)); 

Điều đó sẽ đưa bạn đến trang đầu tiên nhưng cũng sẽ thêm trang 3 vào ngăn xếp lại.

Trong WPF, bạn luôn có thể sử dụng phương thức RemoveBackEntry() để xóa các mục khỏi ngăn xếp lưng nhưng tiếc là nó không có sẵn trong Silverlight cho điện thoại.

1

Tôi khuyên bạn nên overiding nút quay lại nhấn phím chuyển hướng người dùng mà bạn muốn họ đi:

override protected void OnBackKeyPress (System.ComponentModel.CancelEventArgs e) { NavigationService.Navigate (new Uri (" /MainPage.xaml ", UriKind.Relative)); }

+0

Điều này dẫn đến việc viết điều hướng của riêng bạn;) Khi bạn áp dụng mẫu này, bạn cần duy trì nó cho mọi điều hướng quay lại. –

0

Bạn nên tạo "Loaded" sự kiện cho trang của bạn

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    } 
Các vấn đề liên quan