2012-04-23 11 views
26

Quando si esegue il mio programma facendo clic su Run o premendo Ctrl + F5, è possibile aprire finestre diverse in base ad alcune condizioni di controllo?WPF: scegliere la finestra di avvio in base ad alcune condizioni

cioè se una condizione è soddisfatta vorrei aprire una finestra particolare, ma se la sua non voglio aprire un'altra finestra.

Dovrebbe essere come prima di aprire qualsiasi finestra si deve prima verificare la condizione come

if(File.Exists(<path-to-file>) 
    Open Window 1 
else 
    Open Window 2 

è possibile?

+1

Maggiori dettagli sono assolutamente indispensabili qui, di "alcune condizioni", "nuova finestra", "un'altra finestra", ecc – Alex

+0

dispiace alex .. Ho appena aggiunto un pezzo che rende più comprensibile –

+0

@alex penso lui intende che ha due finestre. Quando avvia il programma, dovrebbe scegliere una di queste finestre in base ad alcune condizioni. sai sindhu: è corretto? – Default

risposta

54

guardare in App.xaml

rimuovere StartupUri="MainWindow.xaml"

aggiungere Startup="Application_Startup" nuovo evento Handler

<Application x:Class="YourProject.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Startup="Application_Startup"> 

codice del modulo dietro App.xaml.cs creare Application_Startup come ...

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     //add some bootstrap or startup logic 
     var identity = AuthService.Login(); 
     if (identity == null) 
     { 
      LoginWindow login = new LoginWindow(); 
      login.Show(); 
     } 
     else 
     { 
      MainWindow mainView = new MainWindow(); 
      mainView.Show(); 
     } 
    } 
+0

non dimenticare di includere 'usando System.Windows;' – Multinerd

+0

È interessante notare che dovresti fare molta attenzione durante l'istanziazione di Windows. Avevo una finestra di dialogo che doveva aprire prima di MainWindow, quindi l'ho fatto, e dopo che la LoginDialog è stata chiusa, l'app è stata chiusa. L'ho risolto semplicemente istanziando la finestra MainWindow senza visualizzarla, quindi * dopo * la finestra di dialogo Login chiusa, eseguila. – TheXDS

1

Nel App.xaml abbiamo un tag Application con attributo StartupUri. Credo u dovrebbe scrivere questo codice nella sezione App.xaml.cs

public App() 
{ 
     // Your Code 
} 

e impostare StartUpUri al file XAML desiderato.

+0

Ricordarsi di chiamare il costruttore base per avere il solito comportamento, quindi: 'App pubblica(): base() {...}', altrimenti App non caricherà la finestra. –

6

È possibile utilizzare App.xaml per avviare la tua applicazione e, se vuoi, come ha detto Nikhil Agrawal, cambia StartupUri in modo dinamico.

ma è comunque possibile avviare l'applicazione da public static void Main(). Basta eliminare StartupUri="MainWindow.xaml" in App.xaml, creare program.cs contenente il metodo principale.

[STAThread] 
public static void Main(string[] args) 
{ 
    MainWindow mainWindow = new MainWindow(); 

    var app = new Application(); 

    app.Run(mainWindow); 
}