#c# #wpf
Вопрос:
Я загрузил страницу 1 в рамку в окне, и внутри страницы 1 есть кнопка с этим кодом:
private void Button_Click_2(object sender, RoutedEventArgs e) { this.NavigationService.Navigate(new Uri("NextPage.xaml", UriKind.Relative)); }
Это кадр в главном окне:
lt;Gridgt; lt;Frame x:Name="Main" NavigationUIVisibility="Hidden" Margin="0 0 0 0" /gt; lt;/Gridgt;
Вот где я загружаю страницу 1:
private void Window_Loaded(object sender, RoutedEventArgs e) { Main.Navigate(new Page1()); }
Это работает, когда я удаляю окно и напрямую запускаю приложение со страницы 1, но я хочу иметь окно, потому что то, которое автоматически создает Visual Studio, выглядит очень плохо. Это вызывает обычное System.NullReferenceException: 'Object reference not set to an instance of an object.'
исключение, когда я пытаюсь использовать его внутри страницы, загруженной в фрейм главного окна.
Итак, как я могу перемещаться между страницами в окне?
Ответ №1:
Вы можете использовать Window.GetWindow
это, чтобы получить ссылку на родительское окно, привести результат к вашему типу окна, а затем получить доступ к Frame
:
private void Button_Click_2(object sender, RoutedEventArgs e) { MainWindow parentWindow = Window.GetWindow(this) as MainWindow; if (parentWindow != null) parentWindow.Main.NavigationService.Navigate(new Uri("NextPage.xaml", UriKind.Relative)); }
Комментарии:
1. Спасибо за ответ. Да, это действительно загружает страницу, но я ее не вижу, а страница 1 все еще там.
2. Как он может загрузить страницу, если вы ее не видите…?
3. Я видел, как код переходит к
InitializeComponent()
функции NextPage во время отладки.4. Значит, у вас есть более одного
Frame
под названием «Главный»? Или вы отображаете более одного окна? Или переход обратноPage1
после того, как вы перешли кNextPage
? Вам необходимо предоставить воспроизводимый пример, если вам нужна дополнительная помощь. Вы, очевидно, что-то упускаете здесь, потому что решение, которое я показал, простое.5. NVM понял это. Спасибо вам за вашу помощь. Сейчас это работает идеально.