2017-05-30 2 views
1

J'ai l'impression qu'il me manque quelque chose de fondamental ici, mais je n'arrive pas à trouver une réponse.Comment ouvrir deux fenêtres au lancement dans WPF?

Lorsque mon application se lance, je veux une seconde window basée sur xaml existante pour ouvrir en plus de MainWindow.xaml. J'ai trouvé beaucoup sur l'utilisation de code-behind pour créer un nouveau window, mais je veux ouvrir un window qui est prédéfini dans un autre fichier xaml.

Les deux utilisent MahApps et sont définis comme

<Controls:MetroWindow x:Class=... 
    ... 
</Controls:MetroWindow> 

Le second window est appelé ControlWindow.xaml et se trouve dans la racine avec MainWindow.xaml

Merci

EDIT:

Lorsque vous essayez pour créer et afficher la fenêtre dans l'événement App_Startup dans app.xaml.cs, même si le vent ow hérite de la même classe que MainWindow.xaml, la méthode Show() n'est pas disponible.

MainWindow.xaml.cs

using MahApps.Metro.Controls; 

namespace RollCallDisplayDemo 
{ 
    public partial class MainWindow : MetroWindow 
    {   
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

ControlWindow.xaml.cs

using MahApps.Metro.Controls; 

namespace RollCallDisplayDemo 
{ 
    public partial class ControlWindow : MetroWindow 
    { 
     public ControlWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

App.xaml.cs

using System.Windows; 
using GalaSoft.MvvmLight.Threading; 

namespace RollCallDisplayDemo 
{ 
    public partial class App : Application 
    { 
     void App_Startup(object sender, StartupEventArgs e) 
     { 
      MainWindow NewWindowA = new MainWindow(); 
      ControlWindow NewWindowB = new ControlWindow(); 
     } 

     static App() 
     { 
      DispatcherHelper.Initialize(); 
     } 
    } 
} 

NewWindowA agit comme on peut s'y attendre et permet une nouvelle instance à créer et à montrer. NewWindowB a seulement la méthode InitializeComponent disponible, rien d'autre qui devrait hériter de la classe MetroWindow.

+2

Vous pouvez brancher dans l'événement de démarrage de l'application et de le fichier App.xaml.cs alors vous pouvez faire ce que vous voulez-vous –

+0

Oui, mais après m'être abonné à cela, comment lancer un fichier xaml préexistant comme une nouvelle fenêtre séparée? Tout ce que je peux trouver est comment créer une nouvelle fenêtre qui est définie dans le code-behind. Vous ne savez pas à quoi servait le downvote ... – Ryan

+1

En XAML, vous ** définissez ** une fenêtre et son contenu, mais ne ** le créez pas **. Vous devez ** créer ** une nouvelle fenêtre en utilisant l'opérateur 'new' de toute façon. Votre 'MainWindow' est aussi ** créé ** par un opérateur' new', vous ne le voyez pas - le Framework vous le cache. – dymanoid

Répondre

2

Vous devez appeler NewWindowB.Show() pour le rendre visible. il n'y a pas non plus besoin de passer outre la façon dont la fenêtre principale est créée, il suffit de faire quelque chose comme ceci:

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

     ControlWindow NewWindowB = new ControlWindow(); 
     NewWindowB.Show(); 
    } 
} 
+0

Merci Mark. Il s'avère que la solution a dû être reconstruite pour que la méthode Show() devienne disponible sur NewWindowB. J'apprécie l'exemple du code de travail. – Ryan