2010-08-15 9 views
2

Mon application WPF est en train de devenir une vraie douleur. J'ai créé une fenêtre et voudrais charger une autre page quand je clique sur un bouton. J'ai supposé que ce serait simple, mais cela ne semble pas être le cas. Je parviens à charger l'autre page en utilisant this.content = new UserPage(). Cependant, à partir de cette page utilisateur, je ne peux pas revenir à ma fenêtre principale. Je ne peux pas utiliser this.content car la fenêtre ne peut pas être un enfant. Par conséquent, j'ai cherché autour et j'ai découvert que je devrais utiliser NavigationService pour rendre les choses beaucoup plus faciles. J'ai essayé d'utiliser NavigationService.GetNavigationService(this) mais cela n'a pas fonctionné car il renvoyait toujours null. Je pensais que c'est parce que ma fenêtre principale est dérivée de Window et non NavigationWindow. Existe-t-il un moyen de convertir ma fenêtre en NavigationWindow sans redémarrer le projet? Chaque fois que je crée un nouveau fichier, il n'y a pas de modèle NavigationWindow - seulement Window, Page, User Control etc ...NavigationWindow - Où est-ce?

J'ai essayé de remplacer manuellement le XAML par NavigationWindow et ça fonctionnait bien, mais la méthode NavigationService renvoyait toujours null. Il y avait aussi un bar en haut avec des flèches vers l'arrière et vers l'avant (toutes deux désactivées), mais je n'en ai pas vraiment besoin. Je voudrais juste utiliser la méthode Navigate() afin que je puisse facilement passer d'une page à l'autre. Des idées sur ce que je peux faire?

Merci pour toute aide, cela me rend fou! :)

Répondre

1

J'essayé de remplacer manuellement le XAML avec NavigationWindow et il a fonctionné très bien, mais la méthode NavigationService encore retourné null

Vous n'avez pas besoin NavigationService si votre fenêtre est déjà NavigationWindow. NavigationWindow a une méthode Navigate. Vous pouvez également utiliser un Window standard et y ajouter un contrôle Frame. Cela fonctionne à peu près comme un NavigationWindow, sauf qu'il est intégré dans une fenêtre

+0

Merci pour la réponse. Comment puis-je insérer un cadre dans la fenêtre? J'ai une grille (qui contient toute la mise en page), mais quand je place un cadre dans la fenêtre, il remplace la grille. Est-il possible d'insérer le cadre dans une fenêtre existante? Merci encore – Skoder

+0

Mettez le cadre à l'intérieur de la grille –

+0

Cela fonctionne. J'essayais de mettre ma disposition dans le cadre lui-même. Au lieu de cela, je viens de mettre le cadre en haut de l'arbre visuel et j'ai appelé sa méthode Navigate() qui semble fonctionner. Merci pour l'aide. – Skoder

0

Je l'ai fait mais je n'ai pas réussi à trouver comment obtenir la fenêtre parent rechargée à partir d'une instruction vb.net dans la page qui est situé dans le cadre. J'ai du code dans la fonction window_loaded que je souhaite exécuter.

+0

Utilisez-vous navigationservice.goback? – Skoder

1

Skoder,

Je ne suis pas vraiment sûr de ce que vous essayez de faire, mais je vais voir si je peux aider. Tout d'abord, il semble que vous vouliez une NavigationWindow. Si vous ne voulez qu'une seule page dans votre application, alors votre première approche fonctionnera mais à la minute où vous parlez de plus d'une page et que vous voulez passer d'une page à une autre, vous parlez d'une NavigationWindow. Deuxièmement, une fois que vous choisissez une fenêtre de navigation, le XAML devrait être simple, il suffit de remplacer Window par NavigationWindow et vous devriez être prêt à partir, sauf que vous devez réaliser maintenant que vous ne contrôlerez plus directement le contenu de la fenêtre . Au lieu de cela, le NavigationService intégré va gérer cela. Oh, et vous n'avez pas besoin de créer un NavigationService explicite car la classe en fournit déjà un.Il vous suffit de naviguer:

this.Navigate(new Url("pack://aplication:,,,/MyAssembly,component/MyPage.xaml", UriKind.Absolute)); 

alternative, l'utilisation peut utiliser XAML:

Source = "pack://aplication:,,,/MyAssembly,component/MyPage.xaml" 

À ce stade, vous aurez besoin d'une interface pour permettre aux utilisateurs d'obtenir d'une page à l'autre (par exemple Breadcrumb control ou TreeView), mais une fois qu'ils sont là le contrôle de voyage intégré vous permettra de naviguer dans le journal qui est maintenu automatiquement pour vous. Autrement dit, la plupart du travail de base de la navigation est fait pour vous, vous avez juste besoin de comprendre comment l'utilisateur navigue vers un certain contenu.

Mais à ce stade, les choses peuvent devenir assez étranges. Je me suis heurté à ça moi-même. Comme vous ne pouvez pas ajouter une grille ou une autre explicitation de contenu au cadre, vous devez modifier le modèle de NavigationWindow afin d'ajouter les contrôles supplémentaires qui constituent une application normale. Des choses telles que les menus et les barres d'outils ne font pas partie de la navigation standard de WPF. Pardonnez-moi cet impudent peu d'auto-promotion, mais j'ai construit un produit parce que j'ai rencontré ces limites et qu'il n'y avait rien de disponible sur le marché. Vous pouvez jeter un oeil à la démo à l'adresse:

http://www.teraque.com/products/explorer-chrome-suite/

Il a été conçu pour être la version professionnelle du WPF NavigationControl que Microsoft donne gratuitement. Jetez un oeil à la démo, si vous ne voulez pas acheter la suite, je serais heureux de donner des conseils si c'est la direction que vous souhaitez prendre votre demande.

Sincèrement,

Donald Roy Airey

[email protected]