2014-04-20 4 views
1

J'ai programmé du code sur le contenu de MainWindow. Lorsque j'ai ajouté un masque de connexion pour démarrer avant MainWindow, ma distribution de contenu programmée ne fonctionne plus correctement.Le contenu actuel de la fenêtre ne peut plus être identifié

Le code lorsque le MainWindow est appelé et le login masque est fermé:

Login-masque Code fenêtre (après la connexion réussie)

MainWindow popup = new MainWindow(); 
popup.Show(); 
this.Close(); 

Dans le MainWindow j'appelle mon contenu comme celui-ci qui fonctionne toujours lorsque le MainWindow a été appelé:

MainWindow contenu code

this.contentControl.Content = new UserControlXYZ(); 

Maintenant, quand je l'appelle un autre UserControl de la nouvelle contentControl.Content chargée je reçois un NullPointerException (Avant d'ajouter le login masque, il a été chargé):

UserControlXYZ Contenu Code

(Application.Current.MainWindow.FindName("contentControl") as ContentControl).Content = new UserControlNEWControl(); 

Répondre

2

Appication La fenêtre principale est définie sur la fenêtre étant la fenêtre de démarrage d'une application. Donc, dans votre cas, ce sera la fenêtre de connexion et puisque vous l'avez fermé, Application.Current.MainWindow renverra null.

Si vous voulez obtenir MainWindow, vous pouvez l'obtenir à partir Windows collection comme ceci:

MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().First(); 
mainWindow.contentControl.Content = new UserControlNEWControl(); 

Pour utiliser OfType<T>() and First() méthodes d'extension, ajoutez System.Linq espace de noms dans votre classe.

+1

Grande et utile réponse! – user3524628

Questions connexes