WPF - choisissez la fenêtre de démarrage en fonction de certaines conditions

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

i.e. si une condition est satisfaite 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 n'importe quelle fenêtre il devrait d'abord vérifier l'état comme

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

Est-ce possible?

27
demandé sur Bassie 2012-04-23 10:57:26

3 réponses

regarder App.xaml

supprimer StartupUri="MainWindow.xaml"

ajouter Startup="Application_Startup" nouveau Gestionnaire d'événement

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

Code du formulaire derrière App.XAML.cs créer 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();
        }
    }
55
répondu aifarfa 2012-04-23 07:14:33

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

cependant, vous pouvez toujours démarrer votre application à partir de public static void Main(). Il suffit de supprimer le StartupUri="MainWindow.xaml" l'attribut App.xaml, Ajouter un Program classe à votre projet contenant un Main méthode, puis allez dans les propriétés du projet et définissez l'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:STAThreadAttribute est obligatoire. Si vous avez besoin de votre propre version dérivée de Application, comme la façon dont les projets du FPF créent un App classe 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 la base Application classe directement et supprimer les dérivées à partir de votre projet.

7
répondu Gqqnbig 2018-06-29 13:17:11

App.xaml nous avons Application balise avoir StartupUri l'attribut. Je pense que tu devrais écrire ce code dans App.XAML.section cs

public App()
{
      // Your Code
}

et définissez StartUpUri vers le fichier XAML désiré.

1
répondu Nikhil Agrawal 2012-04-23 07:19:23