WPF: Fenster mit Navigierung
WPF bietet die Funktionalität der Navigierung. Darunter versteht man die Verwendung eines Haupt-Fensters, welches die Anzeige verschiedener Seiten ermöglicht. Über die Pfeilicons oben links kann eine Navigierung zwischen den vorherigen und folgenden Seiten durchgeführt werden. Das Root-Element des Navigierungs-Fensters ist NavigationWindow. Dem Root-Element werden keine weiteren Steuerelemente untergeordnet. Die Seiten (Klasse Page) werden separat als eigene Klassen erstellt und mit Visual Studio designt. Dem Hauptfenster können wir mit Hilfe der Eigenschaft Source den Pfad der XAML-Datei, der anzuzeigenden Seite zuweisen. Alle Klassen für die Navigierung befinden sich im Namensraum System.Windows.Navigation. Ein Beispiel für ein solches Navigierungs-Fenster ist die Windows Systemsteuerung (ab Windows Vista).
Für die Navigierung zur Laufzeit können uns einige Funktionen der Klasse NavigationService helfen. GoBack() navigiert zur vorherigen Seite (falls möglich) und GoForward() navigiert zur folgenden Seite (falls möglich). Beide Funktionen sollten nur aufgerufen werden, wenn die Eigenschaft CanGoBack und CanGoForward den Wert true zurückgibt. Im Beispiel haben wir darauf verzichtet, da das Zurückgehen zur letzten Seite immer möglich ist. Die Funktion Navigate() ermöglicht das Navigieren zu einer bestimmten Seite. Hierfür können wir der Funktion ein Objekt der zu öffnenden Seite übergeben. Alternativ können wir auch einen Pfad (Klasse Uri) der zu öffnenden Seite (Pfad zur XAML-Datei) als Parameter übergeben.
Page1.xaml
<Page x:Class="CSV20.WPF_Navigierung.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Title="Eingabe-Seite" Background="White"> <Grid> <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,15,0,0" Content="Ihre Eingabe:" /> <TextBox HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,20,0,0" Width="100" Name="textBoxEingabe" /> <Button HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,45,0,0" Padding="3" Content="Zur Seite 2" Click="Button_Click" /> </Grid> </Page>
Page1.xaml.cs
using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; namespace CSV20.WPF_Navigierung { /// <summary> /// Interaktionslogik für Page1.xaml /// </summary> public partial class Page1 : Page { public Page1() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Page2(textBoxEingabe.Text)); } } }
Page2.xaml
<Page x:Class="CSV20.WPF_Navigierung.Page2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Title="Anzeige-Seite" Background="LightGray"> <Grid> <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,15,0,0" Content="Ihre Eingabe:" /> <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,17,0,0" Width="100" Name="labelEingabe" /> <Button HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,45,0,0" Padding="3" Content="zurück zur Seite 1" Click="Button_Click" /> </Grid> </Page>
Page2.xaml.cs
using System.Windows.Controls; namespace CSV20.WPF_Navigierung { /// <summary> /// Interaktionslogik für Page2.xaml /// </summary> public partial class Page2 : Page { public Page2(string sEingabe) { InitializeComponent(); labelEingabe.Content = sEingabe; } private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { NavigationService.GoBack(); } } }
MainWindow.xaml
<NavigationWindow x:Class="CSV20.WPF_Navigierung.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Fenster mit Navigierung" Height="250" Width="400" ResizeMode="NoResize" Source="Page1.xaml"> </NavigationWindow>
MainWindow.xaml.cs
using System.Windows.Navigation; namespace CSV20.WPF_Navigierung { /// <summary> /// Interaktionslogik für MainWindow.xaml /// </summary> public partial class MainWindow : NavigationWindow { public MainWindow() { InitializeComponent(); } } }