2012-11-16 8 views
21

Wenn ein neues WPF-Anwendungsprojekt erstellt wird, werden MainWindow.xaml, App.xaml und der entsprechende Code hinter Klassen automatisch generiert. Im App.xaml gibt es ein Attribut, das wird Fenster zunächst ausgeführt werden definiert, die von dem Standard ist es StartupUri="MainWindow.xaml"Wie wird der Start der WPF-Anwendung angepasst?

ich eine neue Dispatcher Klasse im selben Projekt angelegt habe. Beim Start möchte ich, dass die Instanz dieser Klasse erstellt wird und dann eine ihrer Methoden ausgeführt wird. Diese Methode würde das Fenster MainWindow tatsächlich erstellen und anzeigen. Also, wie ändere ich die App.xaml oder App.xaml.cs, um es möglich zu machen? Oder, wenn es nicht von App getan werden kann, wie soll ich es implementieren? Vielen Dank.

Antwort

38

Sie können das Attribut StartupUri aus der App.xaml entfernen.

Dann erstellen Sie eine Überschreibung für OnStartup() in der App.xaml.cs, können Sie Ihre neue Instanz Ihrer Klasse erstellen.

Hier ist, was meine schnelle App.xaml.cs Umsetzung wie folgt aussieht:

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

     new MyClassIWantToInstantiate(); 
    } 
    } 
} 

aktualisieren

ich kürzlich this workaround für einen Fehler entdeckt, wenn Sie diese Methode verwenden app Start anpassen und plötzlich keine der Ressourcen auf Anwendungsebene gefunden werden.

+0

Ja, danke, das funktioniert. – Boris

+0

Können Sie näher erläutern, was MyClassIWantToInstantiate() sein sollte? Ich habe MainWindow ausprobiert, das ist die Klasse des Hauptfensters meiner WPF-App, und nichts passiert danach ... Es wird kein geladener Ereigniscode ausgeführt. –

+0

Die Klasse kann wirklich sein, was immer Sie benötigen. Um eine Witwe anzuzeigen, müssen Sie sie instanziieren und 'Show()' aufrufen, um sie anzuzeigen. –

2

Versuchen Sie, das Startup-Ereignis (Klassenanwendung) zu verwenden - MSDN.

Sie können MainWindow in diesem Ereignishandler anzeigen, nachdem Sie eine Dispatcher-Instanz erstellt haben.