2012-08-31 54 views
6

Khi Trang được điều hướng sang màu bạc, bạn có thể ghi đè phương thức này.Cách phát hiện nút quay lại hoặc điều hướng nút chuyển tiếp trong ứng dụng điều hướng Silverlight

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

Các NavigationEventArgs có liệt kê NavigationMode được định nghĩa là

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

Nhưng gọi e.NavigationMode luôn ném một NotImplementedException

Có cách nào trong Silverlight để phát hiện một trang đang được chuyển đến vì người dùng nhấn nút chuyển tiếp/quay lại trình duyệt.

Điều tôi đang cố gắng đạt được là một số loại trạng thái có thể được giữ nguyên khi người dùng nhấn nút quay lại.

Ví dụ giả sử bạn có trang khách hàng đang hiển thị danh sách khách hàng trong biểu đồ dữ liệu. Người dùng có thể chọn một khách hàng và có một cái nhìn chi tiết trong đó cho thấy tất cả các đơn đặt hàng cho khách hàng đó. Bây giờ trong một mục đơn hàng, bạn có thể nhấp vào liên kết siêu liên kết đưa bạn đến lịch sử giao hàng của đơn đặt hàng là một trang riêng biệt. Khi người dùng nhấn nút quay lại, tôi muốn quay lại trang khách hàng và tự động chọn khách hàng mà anh ấy đang xem. Cái này nó có hoàn toàn có thể xảy ra được không ?

Tôi cũng đã cố gắng ra tính năng đoạn chuyển hướng

NavigationService.Navigate(new Uri("#currentcustomerid=" 
     + customer.Id.ToString(), UriKind.Relative)); 

khi những thay đổi lựa chọn của khách hàng nhưng điều này cho biết thêm quá nhiều mục vào lịch sử khi người dùng nhấp khách hàng khác nhau trên trang của khách hàng.

EDIT

Ngoài ra còn có một phương pháp mà bạn có thể ghi đè

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
{ 
} 

mà là giống như xử lý sự kiện NavigationService.Navigating như được chỉ ra bởi câu trả lời của BugFinder. Trong phương pháp này, e.NavigationMode luôn trả về New khi bạn nhấn nút Quay lại hoặc Chuyển tiếp. Thời gian duy nhất phương pháp này trả về Back là khi bạn rõ ràng gọi NavigationService.GoBack()

Trả lời

1

các

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

áp dụng đối với trường hợp Duyệt ..

nếu tôi làm

_ns.Navigating += ns_Navigating; 
     void ns_Navigating(object sender, NavigatingCancelEventArgs e) 
     { 

      if (SecurityCheck(e.Uri.OriginalString)) return; 
      e.Cancel = true; 
      ShowError("You are not authorised to view this page"); 
     } 

Tôi có thể thấy có e.NavigationMode được đặt. Bạn có thể làm bài kiểm tra ở đó không?

+0

Ngay cả khi bạn nhấn nút Quay lại hoặc Chuyển tiếp. ** NavigationMode ** luôn luôn là 'NavigationMode.New' trong phương thức này. –

1

Tôi không nghĩ có bất kỳ cách dễ dàng để làm điều đó ra khỏi hộp, như xa như tôi biết.

Những gì bạn đang cố gắng để đạt có thể dễ dàng thực hiện bằng cách sử dụng khuôn khổ tôi đã tạo ở http://ultimateframework.codeplex.com

Những gì tôi đã làm là để lưới khung Silverlight hàng hải và lăng kính chuyển hướng với nhau, vì vậy bạn sẽ cần phải đoàn kết và lăng kính và mvvm thân thiện.

gì bạn muốn đạt được có thể được thực hiện bằng khuôn khổ theo những cách sau

1) Thực hiện IsNavigationTarget và trả về true -> mà sẽ giữ cho các trường hợp tương tự khi điều hướng trở lại, do đó, giữ cho lựa chọn/chọn mục.

2) Truy cập tạp chí của onnavigatedto để theo dõi nơi bạn đến từ đâu, nói/item/1 là chồng trước, vì vậy bạn biết trở lại nút đã được ép từ mục 1.

3) Bạn thậm chí có thể thực hiện của bạn tự quay lại/chuyển tiếp/làm mới trong điều khiển tùy chỉnh được cung cấp để đạt được cùng một kết quả (không có trong mã vạch)

Tôi thực sự sử dụng nó cho mã sản xuất tại nơi làm việc và tôi đã tạo nó, vì vậy vui lòng dùng thử. Lưu ý rằng phiên bản trên đó có lỗi và tôi chưa có thời gian để phát hành bản dựng mới nhất của chúng tôi, nhưng bạn nên yêu cầu nó, tôi sẽ cập nhật nó cho bạn :), chỉ cần cho tôi.

1

Đặt biến trong bảng điều khiển người dùng chứa khung nội dung cho biết khách hàng nào đang hoạt động.

Thêm trình xử lý cho sự kiện Điều hướng của khung nội dung trong điều khiển người dùng. Sử dụng điều này để kiểm tra biến cho biết khách hàng nào đang hoạt động (nếu biến không phải là null) và để chọn khách hàng.

+0

Tôi nghĩ rằng bạn đã bỏ lỡ điểm của câu hỏi. Thực tế là khi trang của tôi được điều hướng đến, tôi không thể biết được đó là do điều hướng quay lại hay điều hướng mới. Làm thế nào để lưu trữ sự giúp đỡ của tiểu bang? –

+0

Bởi vì bạn có thể biết chúng đến từ đâu. Nếu họ điều hướng từ trang thứ hai đến trang đầu tiên thông qua các phương tiện khác so với nút quay lại, thì khách hàng sẽ được hiển thị bất kể ổn - nhưng có lẽ điều đó sẽ không phải là không mong muốn. – NeutralHandle

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