2010-02-17 9 views
7

Cela semble être une solution facile, mais je perds trop de temps à essayer de comprendre cela. Peut-être que je conçois mal ma demande (ce qui pourrait être le cas), alors aidez-moi si vous avez une meilleure solution.Empêcher WPF Frame de stocker l'historique dans la pile

Je suis en train de concevoir une application WPF au niveau de l'entreprise qui ressemble beaucoup à Outlook avec un Ribbon au lieu d'une barre d'outils. J'ai beaucoup de différents modules qui sont chargés dans un cadre lorsque l'utilisateur clique sur un RibbonButton. Gardez à l'esprit que son ruban est partagé entre tous les modules. J'ai donc une coque avec un ruban et un cadre. Lorsque l'utilisateur clique sur le bouton du ruban, il charge le module approprié (usercontrol) dans le cadre. Tout est bon. Cependant, si je navigue vers un autre module (en cliquant sur un autre RibbonButton), puis que je clique sur l'original RibbonButton, j'ai maintenant deux instances du même module ouvertes ... mais une seule est affichée dans le cadre ... l'autre le module est dans la pile du cadre. Donc, ma question est, comment puis-je dire à l'image de fermer la commande usercontrol lorsque je navigue vers un autre module? J'ai essayé de régler le JournalEntry.KeepAlive="False", mais cela n'a toujours pas fonctionné. Des pensées? Il n'y a vraiment pas beaucoup de code à afficher, mais je peux le faire si cela peut vous aider.

Répondre

9

Si vous n'avez jamais l'intention de retourner à l'entrée précédente, vous pouvez utiliser NavigationService.RemoveBackEntry() pour effacer l'historique chaque fois que vous naviguez. Le moyen le plus simple de le faire est de gérer les Navigated event

frame.Navigated += frame_Navigated; 

void frame_Navigated(object sender, NavigationEventArgs e) 
{ 
    frame.NavigationService.RemoveBackEntry(); 
} 
+0

Et si je devais le faire seulement pour une seule navigation? –

Questions connexes