none
Créer un main perso en WPF RRS feed

  • Question

  • Bonjour,

    Je viens de finir de passer mon application de WF à WPF.

    Et, le fait que l'on ne retrouve pas le main me perturbe un peu, j'aimerais pouvoir créer un main qui prenne en arguments des strings (pouvoir lancer depuis une ligne de commande par exemple. J'ai vu qu'on pouvait mettre une fonction Application_startup mais celle-ci ne prend pas de string en paramètre ? A moins de parser un des paramètres ?

    Deuxième question, dans mon main j'aimerais lancer une autre fenetre que MainWindows qui se lance automatiquement, c'est possible ? (à partir du moment où on écrit le main je suppose que MainWindows ne se lancera plus).

    J'ai vu sur ce forum : http://stackoverflow.com/questions/6156550/replacing-the-wpf-entry-point

    qu'il créait son main avec sa class AppStartup, mais cette classe doit elle remplacer App.xaml ?

    Si vous pouviez m'éclaircir un peu sur le sujet, ou me rediriger.

    Cordialement,

    mardi 25 septembre 2012 10:31

Réponses

  • Bonjour,

    (Objectif: trouver le main)

    Le main est présent dans l'application sauf qu'on ne peut pas le voir dans les fichiers visibles.

    Mais il est tout à fait possible de le voir. Je ne sais pas si vous avez remarqué, la classe App.xaml.cs est marqué en partial. La méthode main est alors dans l'autre fichier de la classe App. vous pouvez soit faire un clique droit sur App et puis vous cliquez sur Find All references vous aurez alors une liste des références et vous cliquerez alors sur la ligne que j'ai surligné en jaune.

    Etape 1:

    Clique droit sur la classe App

    Etape 2:

    Clique sur la référence

    Vous pouvez aussi visualiser le fichier depuis l'explorateur de solution en cliquant sur "Show All Files" et vous ouvrez le fichier obj\x86\Debug\TempPE\App.g.i.cs qui contient le code ci-dessous de la fameuse méthode main que vous cherchez:

            /// <summary>
            /// Application Entry Point.
            /// </summary>
            [System.STAThreadAttribute()]
            [System.Diagnostics.DebuggerNonUserCodeAttribute()]
            public static void Main() {
                MyWPFApplication.App app = new MyWPFApplication.App();
                app.InitializeComponent();
                app.Run();
            }

    Mais attention le fichier App.g.i.cs est généré automatiquement donc il ne faut absolument pas le modifier.


    Blog: marouene.slimi.net






    • Modifié Marouene Slimi mardi 25 septembre 2012 13:31
    • Proposé comme réponse Marouene Slimi mardi 25 septembre 2012 14:05
    • Marqué comme réponse r0seBa jeudi 27 septembre 2012 12:05
    mardi 25 septembre 2012 13:19
  • (Objectif: Créer son propre main) 

    Pour que vous puissiez créer votre propre méthode Main je vous propose d'ajouter une fenêtre à votre projet que vous appelez "MyApp.xaml" par exemple. Dans un 1er temps ouvrez le MyApp.xaml et faites les modifications pour arriver à un code qui ressemble à celui ci:

    <Application x:Class="MyWPFApplication.MyApp"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
    
        </Application.Resources>
    </Application>

    Une fois c'est fait, vous ouvrez le code behind de MyApp.xaml qui est le fichier MyApp.xaml.cs et vous changez la classe mère de MyApp de Window à Application le résultat étant:

        /// <summary>
        /// Interaction logic for MyApp.xaml
        /// </summary>
        public partial class MyApp : Application
        {
            public MyApp()
            {
                InitializeComponent();
            }
        }

    Vous pouvez alors créer votre propre méthode Main dans cette classe:

            [STAThread]
            public static void Main(string[] args)
            {
                if (args != null && args.Length > 0)
                {
                    //manipuler les arguments
                }
    
                MyApp app = new MyApp();
                app.Run();
            }

    Et enfin il faut aller soit:

    changer le point d'entrée de votre application vers la classe MyApp et non plus la classe App dans les propriétés du projet

    soit supprimer le fichier App.xaml

    Compilez votre projet et si tout va bien vous devriez voir s'afficher votre page MainWindow.xaml


    Blog: marouene.slimi.net

    • Proposé comme réponse Marouene Slimi mardi 25 septembre 2012 14:05
    • Marqué comme réponse r0seBa jeudi 27 septembre 2012 12:05
    mardi 25 septembre 2012 13:52
  • (Objectif: Afficher une fenêtre autre que MainWindow.xaml)

    Pour faire ceci il faut ajouter une nouvelle page à votre projet par exemple "MyMainWindow.xaml" puis il faut aller dans le MyApp.xaml précédemment créé, et modifier la valeur de l'attribut StartupUri de la balise Application pour y mettre le nom de votre propre page. Dans notre exemple: MyMainWindow.xaml

    Le résultat:

    <Application x:Class="MyWPFApplication.MyApp"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MyMainWindow.xaml">
        <Application.Resources>
        </Application.Resources>
    </Application>

    Merci de marquer comme utile les réponses qui vous ont aidé et de valider par "Proposer comme réponse" si celles-ci répondent a votre demande

    Cordialement,



    Blog: marouene.slimi.net


    • Proposé comme réponse Marouene Slimi mardi 25 septembre 2012 14:05
    • Modifié Marouene Slimi mardi 25 septembre 2012 18:30
    • Marqué comme réponse r0seBa jeudi 27 septembre 2012 12:05
    mardi 25 septembre 2012 14:03

Toutes les réponses

  • Bonjour,

    (Objectif: trouver le main)

    Le main est présent dans l'application sauf qu'on ne peut pas le voir dans les fichiers visibles.

    Mais il est tout à fait possible de le voir. Je ne sais pas si vous avez remarqué, la classe App.xaml.cs est marqué en partial. La méthode main est alors dans l'autre fichier de la classe App. vous pouvez soit faire un clique droit sur App et puis vous cliquez sur Find All references vous aurez alors une liste des références et vous cliquerez alors sur la ligne que j'ai surligné en jaune.

    Etape 1:

    Clique droit sur la classe App

    Etape 2:

    Clique sur la référence

    Vous pouvez aussi visualiser le fichier depuis l'explorateur de solution en cliquant sur "Show All Files" et vous ouvrez le fichier obj\x86\Debug\TempPE\App.g.i.cs qui contient le code ci-dessous de la fameuse méthode main que vous cherchez:

            /// <summary>
            /// Application Entry Point.
            /// </summary>
            [System.STAThreadAttribute()]
            [System.Diagnostics.DebuggerNonUserCodeAttribute()]
            public static void Main() {
                MyWPFApplication.App app = new MyWPFApplication.App();
                app.InitializeComponent();
                app.Run();
            }

    Mais attention le fichier App.g.i.cs est généré automatiquement donc il ne faut absolument pas le modifier.


    Blog: marouene.slimi.net






    • Modifié Marouene Slimi mardi 25 septembre 2012 13:31
    • Proposé comme réponse Marouene Slimi mardi 25 septembre 2012 14:05
    • Marqué comme réponse r0seBa jeudi 27 septembre 2012 12:05
    mardi 25 septembre 2012 13:19
  • (Objectif: Créer son propre main) 

    Pour que vous puissiez créer votre propre méthode Main je vous propose d'ajouter une fenêtre à votre projet que vous appelez "MyApp.xaml" par exemple. Dans un 1er temps ouvrez le MyApp.xaml et faites les modifications pour arriver à un code qui ressemble à celui ci:

    <Application x:Class="MyWPFApplication.MyApp"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
    
        </Application.Resources>
    </Application>

    Une fois c'est fait, vous ouvrez le code behind de MyApp.xaml qui est le fichier MyApp.xaml.cs et vous changez la classe mère de MyApp de Window à Application le résultat étant:

        /// <summary>
        /// Interaction logic for MyApp.xaml
        /// </summary>
        public partial class MyApp : Application
        {
            public MyApp()
            {
                InitializeComponent();
            }
        }

    Vous pouvez alors créer votre propre méthode Main dans cette classe:

            [STAThread]
            public static void Main(string[] args)
            {
                if (args != null && args.Length > 0)
                {
                    //manipuler les arguments
                }
    
                MyApp app = new MyApp();
                app.Run();
            }

    Et enfin il faut aller soit:

    changer le point d'entrée de votre application vers la classe MyApp et non plus la classe App dans les propriétés du projet

    soit supprimer le fichier App.xaml

    Compilez votre projet et si tout va bien vous devriez voir s'afficher votre page MainWindow.xaml


    Blog: marouene.slimi.net

    • Proposé comme réponse Marouene Slimi mardi 25 septembre 2012 14:05
    • Marqué comme réponse r0seBa jeudi 27 septembre 2012 12:05
    mardi 25 septembre 2012 13:52
  • (Objectif: Afficher une fenêtre autre que MainWindow.xaml)

    Pour faire ceci il faut ajouter une nouvelle page à votre projet par exemple "MyMainWindow.xaml" puis il faut aller dans le MyApp.xaml précédemment créé, et modifier la valeur de l'attribut StartupUri de la balise Application pour y mettre le nom de votre propre page. Dans notre exemple: MyMainWindow.xaml

    Le résultat:

    <Application x:Class="MyWPFApplication.MyApp"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MyMainWindow.xaml">
        <Application.Resources>
        </Application.Resources>
    </Application>

    Merci de marquer comme utile les réponses qui vous ont aidé et de valider par "Proposer comme réponse" si celles-ci répondent a votre demande

    Cordialement,



    Blog: marouene.slimi.net


    • Proposé comme réponse Marouene Slimi mardi 25 septembre 2012 14:05
    • Modifié Marouene Slimi mardi 25 septembre 2012 18:30
    • Marqué comme réponse r0seBa jeudi 27 septembre 2012 12:05
    mardi 25 septembre 2012 14:03
  • Bonjour,

    Rien à dire concernant vos réponses, tout est parfait, merci.

    Cordialement,

    EDIT: Finalement je n'y arrive pas, j'ai une erreur sur la ligne app.Run(), aucun constructeur correspondant n'a été trouvé. Après un deuxième essai j'ai une autre erreur sur cette meme ligne : "la référence d'objet n'est pas définie à une instance d'objet"

    Le problème vient certainement du fait que ma fenetre a pour constructeur deux paramètres. Alors ma question devient donc : Est-il possible d'ouvrir une fenetre personnalisée avec des paramètres ?


    • Modifié r0seBa jeudi 27 septembre 2012 12:43
    jeudi 27 septembre 2012 12:05
  • Je vous en prie, c'est avec plaisir que je vous aide.

    Alors déjà  est-ce que votre MyApp.xaml.cs ressemble à celui là ?

        public partial class MyApp : Application
        {
            public MyApp()
            {
                InitializeComponent();
            }
            
            [STAThread]
            public static void Main(string[] args)
            {
                if (args != null && args.Length > 0)
                {
                    //manipuler les arguments
                }
    
                MyApp app = new MyApp();
                app.Run();
            }
        }
    }


    Blog: marouene.slimi.net

    jeudi 27 septembre 2012 13:06