Навигация из App.xaml.cs - PullRequest
       0

Навигация из App.xaml.cs

9 голосов
/ 22 декабря 2011

Я хочу добавить панель приложения на несколько страниц моего приложения.Итак, я определяю панель приложения как ресурс приложения, чтобы она могла использоваться несколькими страницами.Теперь обработчики событий для этих кнопок относятся к классу 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) "

Ответы [ 3 ]

24 голосов
/ 22 декабря 2011

Работает ли это, если вы получаете доступ к кадру?

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

Edit: Каждое приложение имеет только одну Рамку . Именно этот кадр выставляет NavigationService. Следовательно, NavigationService всегда доступен через фрейм, поскольку его всегда есть в любом приложении Windows Phone. Поскольку вы обычно не создаете экземпляр нового NavigationService, легко подумать, что это статический метод. Однако на самом деле это нестатический класс, который создается автоматически при запуске приложения. Все, что вы делаете в этом случае, - это получение глобального экземпляра, который прикреплен к всегда присутствующему фрейму, и его использование для перемещения между страницами. Это означает, что вашему классу не нужно создавать или явно наследовать NavigationService.

0 голосов
/ 04 марта 2015

Я нашел этот подход лучше. Объект RootFrame уже находится в файле App.xaml.cs, вам просто нужно вызвать его. Также безопаснее поместить это в диспетчер потоков UI.

 Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    // change UI here
                    RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
                });
0 голосов
/ 23 января 2014

Другой способ перейти на другую страницу из 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);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...