2010-11-06 9 views
4

J'apprends le prisme et j'ai rencontré un problème.L'application Prism ne se ferme pas lorsqu'elle est fermée

J'ai fait une application très similaire à celle que fait Mike Taulty dans son excellent tutoriel sur Prism. La plus grande différence est que mon application est une application WPF au lieu de Silverlight.

Je constate cependant que j'ai rencontré un problème. Lorsque je ferme la fenêtre shell principale, l'application ne quitte pas. La fenêtre va un chemin, mais le débogueur est toujours actif.

J'ai essayé de rechercher des piles d'appels et autres, mais Visual Studio me dit simplement qu'il s'agit d'un "code externe".

Des idées sur ce que je peux faire/chercher pour résoudre ce problème?

Répondre

5

substituez la méthode OnStartup dans le code derrière de votre App.xaml et ajoutez ceci:

this.ShutdownMode = ShutdownMode.OnMainWindowClose; 

HTH

+0

Vous êtes génial! Merci beaucoup! – Vaccano

3

La réponse de Dyer résoudre seulement une partie du problème.

J'ai eu le même problème, et après un moment, j'ai découvert que les commandes de navigation de région ne fonctionnent pas bien non plus.

Le problème était avec la création de Shell dans Bootstrapper. Lorsque j'ai corrigé cela, j'ai deux instances de Windows Shell. Pourquoi?

Le vrai problème était le démarrage Uri dans l'app.xaml. Vous ne pouvez pas avoir les deux Uri de démarrage avec la création Shell dans Bootstrapper. Supprimez-le du fichier app.xaml, corrigez votre Shell et vous n'avez pas besoin de ce "Patch" et votre application se comportera comme elle le devrait, elle se fermera lorsque vous fermerez le Shell.

Encore une fois, ce n'est qu'un symptôme, d'autres problèmes augmenteront si vous ne corrigez pas la création du shell.

protected override DependencyObject CreateShell() 
{ 
    return this.Container.Resolve<Shell>(); 
} 

protected override void InitializeShell() 
{ 
    base.InitializeShell(); 

    Application.Current.MainWindow = (Shell)this.Shell; 
    Application.Current.MainWindow.Show(); 

    IRegionManager regionManager = this.Container.Resolve<IRegionManager>(); 
    regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(MainView)); 
}