web-dev-qa-db-fra.com

WPF - choisissez la fenêtre de démarrage en fonction d'une condition

Lors de l'exécution de mon programme en cliquant sur Run ou en appuyant sur Ctrl + F5, est-il possible d'ouvrir différentes fenêtres en fonction d'une condition de vérification?

C'est-à-dire que si une condition est remplie, je souhaite ouvrir une fenêtre particulière, mais si ce n'est pas le cas, je veux ouvrir une autre fenêtre.

Il devrait être comme avant d'ouvrir une fenêtre, il doit d'abord vérifier la condition comme

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

Est-ce possible?

32
sai sindhu

regardez App.xaml

retirer StartupUri="MainWindow.xaml"

ajouter Startup="Application_Startup" nouveau gestionnaire d'événements

<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">

le code de formulaire derrière App.xaml.cs crée Application_Startup comme ...

    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();
        }
    }
58
aifarfa

Vous pouvez utiliser App.xaml Pour démarrer votre application et, comme l'a dit Nikhil Agrawal, modifier dynamiquement StartupUri.

Cependant, vous pouvez toujours démarrer votre application à partir de public static void Main(). Supprimez simplement l'attribut StartupUri="MainWindow.xaml" Dans App.xaml, Ajoutez une classe Program à votre projet contenant une méthode Main, puis accédez aux propriétés du projet et définissez la propriété objet de démarrage à YourAssemblyName.Program.

[STAThread]
public static void Main(string[] args)
{
    var app = new Application();
    var mainWindow = new MainWindow();
    app.Run(mainWindow);
}

Remarque, le STAThreadAttribute est requis. Si vous avez besoin de votre propre version dérivée de Application, comme la façon dont les projets WPF créent une classe dérivée App par défaut, vous pouvez l'utiliser dans le Main à la place de Application. Mais, si vous n'en avez pas besoin, vous pouvez simplement utiliser directement la classe de base Application et supprimer celle dérivée de votre projet.

7
Gqqnbig

Dans App.xaml nous avons une balise Application ayant l'attribut StartupUri. Je pense que vous devriez écrire ce code dans la section App.xaml.cs

public App()
{
      // Your Code
}

et définissez StartUpUri sur le fichier xaml souhaité.

1
Nikhil Agrawal