9
votes

Navigation d'app.xaml.cs

Je veux ajouter une barre d'application à plusieurs pages de mon application. Donc, je définit la barre d'application comme une ressource d'application afin qu'elle puisse être utilisée par plusieurs pages. Maintenant, les gestionnaires d'événements pour ces boutons sont dans la classe code> de la classe comme mentionné ici http://msdn.microsoft.com/en-us/library/hh394043%28v=Vs.92%29.aspx . Mais ces boutons de barres d'applications sont essentiellement des raccourcis vers des pages importantes. Ainsi, en cliquant sur un bouton, vous devez simplement vous emmener à la page correspondante. Mais, puisque je définit les gestionnaires d'événements dans app.xaml.cs code>, cela ne me permet pas de naviguer. Je comprends la raison pour cela. Mais, je ne sais pas comment résoudre le problème.

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


0 commentaires

3 Réponses :


24
votes

fonctionne-t-il si vous avez accès au cadre?

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


2 commentaires

Merci beaucoup. Ça a marché. Pourriez-vous s'il vous plaît expliquer cela un peu?


Je vous en prie. J'ai édité mon poste - espérons que cela explique pourquoi cela fonctionne.



0
votes

Un autre moyen de naviguer vers une autre page d'app.xaml.cs (à l'aide de la barre de l'application) utilise le rotorframe var (à la ligne de fin):

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 commentaires

0
votes

J'ai trouvé cette approche un meilleur. L'objet rootframe est déjà dans le fichier App.xaml.cs, il vous suffit de l'appeler. Mettre également cela dans un répartiteur de fil d'interface utilisateur est plus sûr.

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


0 commentaires