2010-07-22 8 views
3

J'ai ce petit morceau de code.Afficher la fenêtre dans Application_Startup. Wpf

private void Application_Startup(object sender, StartupEventArgs e) 
     { 
      WndAbout ab = new WndAbout(); 
      ab.Show(); 
     } 

Et souhaitez afficher la fenêtre ou la boîte de dialogue au démarrage de l'application, avant que les autres modules ne soient chargés.

Mais! Quand je ferme la fenêtre montrée, la fenêtre principale, qui commence plus tard est fermée aussi!

Qu'est-ce que je fais mal? J'ai essayé de faire Showdialog() - la même situation s'est produite.

Répondre

6

Le problème que vous rencontrez vient du fait que WPF gère l'arrêt.

Vous pouvez modifier l'arrêt-comportement à travers le ...

Application.Current.ShutdownMode 

... propriété. Changez-le à une valeur approriate:

Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose; 

cela aidera.

Une autre façon est de définir manuellement la propriété MainWindow à votre deuxième fenêtre.

Si vous souhaitez créer uniquement un écran d'accueil , utilisez l'option splashscreen disponible depuis .net 3.51. L'informatique a l'avantage d'être chargée très tôt dans la séquence de chargement de l'application, beaucoup plus tôt qu'une fenêtre peut le faire.

Pour ce faire, ouvrez les propriétés onglet d'une image dans votre projet explorer et définir le Construire action à SplashScreen


Mise à jour

Dans un de mes apps J'ai eu un design qui devait aussi montrer un dialogue modal avant d'afficher la fenêtre principale. A ce moment je ne connaissais pas le ShutdownMode -property.

Ce que j'ai fait, c'est que j'ai commencé un Window qui était invisible pour l'utilisateur. C'était la première fenêtre et elle contrôlait aussi app-livetime (comportement par défaut de WPF). Hors de cette fenêtre j'ai ouvert le dialogue désiré (une fenêtre qui a été montrée modale). Si cette boîte de dialogue a échoué, j'ai fermé la fenêtre masquée et l'application complètement fermée. Si la boîte de dialogue s'est déroulée correctement, j'ai créé la première instance de MainWindow, avec laquelle l'utilisateur peut travailler.

+0

Non, les deux n'ont pas aidé. Mais il semble que j'ai exclu cette situation. Je me cache à propos de la fenêtre et cela aide pour une raison quelconque. –

+0

Je pense que vous devez supprimer StartupURI et ouvrir le formulaire manuellement. Cependant ce que vous décrivez est aussi un moyen possible (je l'ai utilisé aussi pour un problème similaire). Mais seulement comme une suggestion, si votre seul désir est de montrer une information sur le démarrage de l'application, pensez à utiliser l'option splash-screen.Il est montré au tout début de l'application, avant de charger les assemblages de graisse et donc son utilisation conduit à une bien meilleure expérience utilisateur pour votre application. – HCL

+0

Non, la boîte de dialogue À propos est juste un exemple, désolé d'induire en erreur. Ce sera LogonDialog. –

2
private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    ShutdownMode mode = this.ShutdownMode; 
    this.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown; 
    YourLogonWnd logon = new YourLogonWnd(); 
    logon.ShowDialog(); 
    if (!logon.DialogResult.HasValue || !logon.DialogResult.Value) 
    this.Shutdown(); 
    else 
    this.ShutdownMode = mode; 
} 

En fait, « OnMainWindowClose » est préférable d'utiliser à la fin du gestionnaire d'événements.

+0

Cela a fonctionné pour moi. Merci. – Michael

Questions connexes