Как правильно сделать переходы между страницами WPF C#?

В WPF (Windows Presentation Foundation) вам необходимо использовать навигационную систему для создания переходов между страницами. Существует несколько способов реализации навигации, и одним из наиболее распространенных является использование Frame элемента.

1. Создайте новый проект WPF в Visual Studio.
2. Добавьте Frame элемент на основное окно (MainWindow.xaml). Frame будет использоваться для отображения различных страниц.

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Frame x:Name="MainFrame" NavigationUIVisibility="Hidden"/>
    </Grid>
</Window>

3. Создайте новые WPF Page для каждой страницы, которую хотите отображать. Например, создайте MainPage.xaml и SecondPage.xaml.

4. В MainPage.xaml.cs добавьте обработчик события Loaded, чтобы первая страница отображалась при запуске приложения.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        MainPage mainPage = new MainPage();
        MainFrame.Navigate(mainPage);
    }
}

5. Воспользуйтесь методом Navigate(Frame, Object), чтобы перейти на другую страницу. Например, в обработчике нажатия кнопки на MainPage.xaml.cs:

private void Button_Click(object sender, RoutedEventArgs e)
{
    SecondPage secondPage = new SecondPage();
    MainFrame.Navigate(secondPage);
}

6. Чтобы добавить кнопку "Назад", используйте команду GoBack у объекта Frame:

private void BackButton_Click(object sender, RoutedEventArgs e)
{
    if (MainFrame.CanGoBack)
        MainFrame.GoBack();
}

Теперь вы можете создавать переходы между различными страницами в WPF с использованием навигационной системы. Это позволит вам создавать модульные и масштабируемые приложения, где каждая страница представляет собой отдельный модуль с уникальными функциональными возможностями.