Lär dig skapa applikationer med flera sidor, navigera mellan dem och hantera flerfönsterlayout i WPF.
WPF erbjuder en inbyggd mekanism för navigering mellan sidor med hjälp av klasserna Frame och Page.
Lägg till sidor:
Page1.xaml och Page2.xaml.Lägg till en Frame i MainWindow:
<Window x:Class="WPFApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Navigering" Height="400" Width="600">
<Grid>
<Frame x:Name="MainFrame" NavigationUIVisibility="Hidden" />
</Grid>
</Window>
MainWindow.xaml.cs:public MainWindow()
{
InitializeComponent();
MainFrame.Navigate(new Page1());
}
Page1.xaml:<Button Content="Gå till sida 2" Click="NavigateToPage2" />
I Page1.xaml.cs:
private void NavigateToPage2(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Page2());
}
I MVVM-designmönstret hanteras navigering via kommandon och ViewModels istället för direkt i koden.
NavigationService.cs:using System;
using System.Windows.Controls;
public class NavigationService
{
private readonly Frame _frame;
public NavigationService(Frame frame)
{
_frame = frame;
}
public void Navigate(Type pageType)
{
_frame.Navigate(Activator.CreateInstance(pageType));
}
}
public partial class MainWindow : Window
{
public NavigationService NavigationService { get; private set; }
public MainWindow()
{
InitializeComponent();
NavigationService = new NavigationService(MainFrame);
DataContext = new MainViewModel(NavigationService);
MainFrame.Navigate(new Page1());
}
}
public class MainViewModel
{
private readonly NavigationService _navigationService;
public ICommand NavigateCommand { get; }
public MainViewModel(NavigationService navigationService)
{
_navigationService = navigationService;
NavigateCommand = new RelayCommand(o => _navigationService.Navigate(typeof(Page2)));
}
}
<Button Content="Gå till sida 2" Command="{Binding NavigateCommand}" />
I vissa scenarier kan du behöva skapa och hantera flera fönster i din applikation.
Skapa ett nytt fönster:
Högerklicka på projektet och välj Add > New Item > Window (WPF). Namnge fönstret SecondWindow.xaml.
Öppna fönstret från koden:
I MainWindow.xaml.cs:
private void OpenSecondWindow(object sender, RoutedEventArgs e)
{
SecondWindow secondWindow = new SecondWindow();
secondWindow.Show();
}
<Button Content="Öppna nytt fönster" Click="OpenSecondWindow" />
Dialogfönster används för att interagera med användaren på ett fokuserat sätt.
ShowDialog:private void OpenDialog(object sender, RoutedEventArgs e)
{
SecondWindow dialog = new SecondWindow();
bool? result = dialog.ShowDialog();
if (result == true)
{
MessageBox.Show("Dialogen stängdes med OK.");
}
}
SecondWindow:private void OnOkClicked(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
SecondWindow.xaml:<Button Content="OK" Click="OnOkClicked" />
Nästa lektion kommer vi att fokusera på att bygga ett avslutande projekt som kombinerar allt vi har lärt oss, inklusive data binding, navigering, och MVVM-designmönstret.