簡體   English   中英

從App.xaml.cs導航

[英]Navigating from App.xaml.cs

我想在我的應用程序的多個頁面中添加一個應用程序欄。 因此,我將應用程序欄定義為應用程序資源,以便它可以被多個頁面使用。 現在,這些按鈕的事件處理程序位於App類中,如此處所述http://msdn.microsoft.com/en-us/library/hh394043%28v=VS.92%29.aspx 但是,這些應用欄按鈕基本上是重要頁面的快捷方式。 因此,單擊按鈕會將您帶到相應的頁面。 但是,因為我在App.xaml.cs定義事件處理程序,所以它不允許我導航。 我理解這個的原因。 但是,我不知道如何解決這個問題。

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

說“非靜態字段,方法或屬性System.Windows.Navigation.NavigationService.Navigate(System.Uri)”需要對象引用“

如果您可以訪問框架,它是否有效?

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

編輯:每個應用程序只有一個框架 這個框架暴露了NavigationService 因此,始終可以通過框架訪問NavigationService,因為在任何Windows Phone應用程序中始終都有它的實例。 由於您通常不會實例化新的NavigationService ,因此很容易認為它是靜態方法。 但是,它實際上是一個非靜態類,可以在運行應用程序時自動實例化。 在這種情況下,您所做的就是獲取全局實例,該實例附加到始終存在的Frame,並使用它在頁面之間導航。 這意味着您的類不必實例化或顯式繼承NavigationService。

另一種從App.xaml.cs導航到其他頁面的方法(使用應用欄)使用rootFrame var(在結束行):

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);

}

我發現這種方法更好。 RootFrame對象已經在App.xaml.cs文件中,您只需要調用它。 將它放在UI線程調度程序中也更安全。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM