Текущее содержимое окна больше не может быть идентифицировано

Я запрограммировал код поверх содержимого MainWindow. Поскольку я добавил маску входа в систему для запуска перед MainWindow, мое запрограммированное распространение контента больше не работает должным образом.

Код при вызове MainWindow и закрытии логин-маски:

Код окна входа-маски (после успешного входа)

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

В MainWindow я вызываю свой контент следующим образом, который все еще работает при вызове MainWindow:

Код содержимого MainWindow

this.contentControl.Content = new UserControlXYZ();

Теперь, когда я вызываю другой UserControl из нового загруженного contentControl.Content, я получаю исключение NullPointerException (перед добавлением маски входа в систему он был загружен):

Код содержимого UserControlXYZ

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

person user3524628    schedule 20.04.2014    source источник


Ответы (1)


Приложение главное окно устанавливается в окно, которое является окном запуска приложения. Таким образом, в вашем случае это будет окно входа в систему, и, поскольку вы его закрыли, Application.Current.MainWindow вернет значение null.

Если вы хотите получить MainWindow, вы можете получить его из Windows collection следующим образом:

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

Чтобы использовать методы расширения OfType<T>() and First(), добавьте пространство имен System.Linq в свой класс.

person Rohit Vats    schedule 20.04.2014
comment
Отличный и полезный ответ! - person user3524628; 21.04.2014