web-dev-qa-db-fra.com

Comment personnaliser le démarrage de l'application WPF?

Lorsqu'un nouveau projet d'application WPF est créé, MainWindow.xaml, App.xaml et leur code correspondant derrière les classes sont générés automatiquement. Dans le App.xaml il y a un attribut qui définit quelle fenêtre va être exécutée initialement et par défaut c'est StartupUri="MainWindow.xaml"

J'ai créé une nouvelle classe Dispatcher dans le même projet. Au démarrage, je veux que l'instance de cette classe Dispatcher soit construite et ensuite une de ses méthodes soit exécutée. Cette méthode créerait et afficherait en fait la fenêtre MainWindow. Alors, comment puis-je modifier le App.xaml ou App.xaml.cs pour y arriver? Ou, si cela ne peut pas être fait par App, comment dois-je l'implémenter? Merci.

25
Boris

Vous pouvez supprimer l'attribut StartupUri de App.xaml.

Ensuite, en créant un remplacement pour OnStartup() dans App.xaml.cs, vous pouvez créer votre nouvelle instance de votre classe Dispatcher.

Voici à quoi ressemble mon implémentation rapide app.xaml.cs:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
      base.OnStartup(e);

      new MyClassIWantToInstantiate();
    }
  }
}

Mise à jour

J'ai récemment découvert cette solution de contournement pour un bogue si vous utilisez cette méthode pour personnaliser le démarrage de l'application et soudain aucune des ressources au niveau de l'application ne peut être trouvée.

45
Eric Olsson

Essayez d'utiliser l'événement Startup (classe Application) - MSDN .

Vous pouvez afficher MainWindow dans ce gestionnaire d'événements - après avoir créé une instance Dispatcher.

2
mveith