Как перейти на другую страницу с помощью кнопки в WPF

у меня есть второй .страница xaml настроена под именем Page2.xaml и я хочу сделать так, чтобы при нажатии моей кнопки пользователь переходил в Page2.xaml

у меня есть это для моей кнопки внутри моего Page1.xaml:

<Grid>
    <Button x:Name="localModeBtn" 
            Style="{StaticResource MainButtonStyle}"  
            Content="local mode" 
            Click="localModeBtn_Click" />
</Grid>

и для обработчика событий button:

private void localModeBtn_Click(object sender, RoutedEventArgs e)
    {
        Uri uri = new Uri("Page2.xaml", UriKind.Relative);
        this.NavigationService.Navigate(uri);
    }

при нажатии на кнопку я получаю сообщение об ошибке: "не удается найти ресурс page2.xaml" Дело в том, что Page2.xaml в папке Pag1.xaml Итак, я не вижу, где я ошибся?

6 ответов


решение моего собственного вопроса:

Я чувствую себя немного глупо, обеспечивая решение на мой собственный вопрос, но благодаря Jasti это ссылке я смог разобраться в своем коде. Поскольку он только опубликовал комментарий, Я не могу отметить его как ответ, поэтому вот решение.

Я изменил окно навигации на окно и вставил:

<DockPanel>
    <Frame x:Name="_NavigationFrame" NavigationUIVisibility="Hidden" />
</DockPanel>

и в конструкторе главного окна.код XAML.cs я добавил:

_NavigationFrame.Navigate(new Page1());

тогда последним шагом было настройте обработчик событий button на:

this.NavigationService.Navigate(new Uri("Pages/Page2.xaml", UriKind.Relative));

для этого вам не нужен код c#, просто сделайте это в XML:

<Button Content="local mode"
    Command="NavigationCommands.GoToPage"
    CommandParameter="/Page2.xaml"/>

(переформатированный код не протестирован)


вы должны использовать это, это работает для меня:

var Page2= new Page2(); //create your new form.
Page2.Show(); //show the new form.
this.Close(); //only if you want to close the current form.

есть variable type страницы со страницей.правильное имя xaml в вашем решении. после этого, вы должны использовать его методы, чтобы сделать ее функциональной.


используйте любой контейнер и свяжите содержимое с любым свойством в viewmodel или codebehind. После этого вам просто нужно обновить свойство, установив новую страницу и вызвав событие PropertyChanged (см. интерфейс INotifyPropertyChanged). Это обновит содержимое вашего контейнера, и вы сможете отображать все, что захотите.


в случае, если вы хотите отдельное окно

NavigationWindow navWIN = new NavigationWindow();
navWIN.Content = new pageWFbchAdmin();
navWIN.Show(); 
//winBchAdmin.ShowDialog();

private void Navigate_Click(object sender, RoutedEventArgs e)//By Prince Jain 
{
    this.NavigationService.Navigate(new Uri("Page3.xaml", UriKind.Relative));
}