2011-12-22 32 views
9

Tôi muốn thêm thanh ứng dụng vào nhiều trang trong ứng dụng của mình. Vì vậy, tôi xác định thanh ứng dụng như một tài nguyên ứng dụng để nó có thể được sử dụng bởi nhiều trang. Bây giờ, các trình xử lý sự kiện cho các nút này nằm trong lớp App như đã đề cập ở đây http://msdn.microsoft.com/en-us/library/hh394043%28v=VS.92%29.aspx. Nhưng, các nút thanh ứng dụng này về cơ bản là các phím tắt đến các trang quan trọng. Vì vậy, việc nhấp vào một nút sẽ đưa bạn đến trang tương ứng. Nhưng, vì tôi định nghĩa các trình xử lý sự kiện trong App.xaml.cs, nó không cho phép tôi điều hướng. Tôi hiểu lý do cho việc này. Nhưng, tôi không biết cách giải quyết vấn đề.Điều hướng từ App.xaml.cs

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

nói "Một tham chiếu đối tượng là cần thiết cho các lĩnh vực, phương pháp không tĩnh hoặc tài sản System.Windows.Navigation.NavigationService.Navigate (System.Uri)"

Trả lời

24

Liệu nó có tác dụng nếu bạn có thể truy cập vào khung?

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Counting.xaml", UriKind.RelativeOrAbsolute)); 

Chỉnh sửa: Mỗi ứng dụng chỉ có một Frame. Đó là khung hình hiển thị số NavigationService. Do đó, NavigationService luôn có thể truy cập thông qua khung vì luôn có một phiên bản của nó trong bất kỳ ứng dụng Windows Phone nào. Vì bạn thường không khởi tạo một NavigationService mới, thật dễ dàng để nghĩ rằng đó là một phương pháp tĩnh. Tuy nhiên, nó thực sự là một lớp không tĩnh được tự động khởi tạo khi ứng dụng của bạn được chạy. Tất cả những gì bạn đang làm trong trường hợp này là lấy cá thể chung, được gắn vào Khung luôn hiện hữu và sử dụng nó để điều hướng giữa các trang. Điều này có nghĩa là lớp học của bạn không phải khởi tạo hoặc thừa kế một cách rõ ràng, một NavigationService.

+0

Cảm ơn rất nhiều. Nó đã làm việc. Bạn có thể giải thích điều này một chút không? – Divya

+2

Bạn được chào đón. Tôi đã chỉnh sửa bài đăng của mình - hy vọng nó giải thích lý do tại sao nó hoạt động. – keyboardP

0

một cách khác để điều hướng đến một trang khác từ App.xaml.cs (sử dụng thanh ứng dụng) đang sử dụng var rootFrame (tại dòng cuối):

private Frame rootFrame = null; 
protected override async void OnLaunched(LaunchActivatedEventArgs args) 
{ 
    ... 
    SettingsPane.GetForCurrentView().CommandsRequested += App_CommandRequested; 
} 

private void App_CommandRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) 
{ 
SettingsCommand cmdSnir = new SettingsCommand("cmd_snir", "Snir's Page", 
       new Windows.UI.Popups.UICommandInvokedHandler(onSettingsCommand_Clicked)); 
args.Request.ApplicationCommands.Add(cmdSnir); 
} 

void onSettingsCommand_Clicked(Windows.UI.Popups.IUICommand command) 
{ 
if (command.Id.ToString() == "cmd_snir") 
     rootFrame.Navigate(typeof(MainPage)); //, UriKind.RelativeOrAbsolute); 

} 
0

tôi thấy phương pháp này một tốt hơn một. Đối tượng RootFrame đã có trong tệp App.xaml.cs, bạn chỉ cần gọi nó. Ngoài ra, việc đặt điều này trong trình điều phối chuỗi giao diện người dùng an toàn hơn.

Deployment.Current.Dispatcher.BeginInvoke(() => 
       { 
        // change UI here 
        RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 
       }); 
+0

Tại sao nó an toàn hơn? – GBU

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