20.3 Fenster vom Typ »NavigationWindow«
Weiter oben wurde schon erklärt, dass ein Fenster vom Typ NavigationWindow dem Benutzer eine Navigation anbietet, die der eines Browsers ähnelt. Die Umsetzung der Navigation macht mit NavigationWindow keine Schwierigkeiten, da alle notwendigen Verhaltensweisen bereits zur Verfügung gestellt werden.
Die Klasse NavigationWindow ist von der Klasse Window abgeleitet und weist daher dieselben Eigenschaften und Methoden auf. Allerdings repräsentiert NavigationWindow nur einen Rahmen als Grundstruktur, der weder Programmlogik noch Steuerelemente enthalten sollte. Dabei ist die Navigationsleiste, mit der der Anwender durch die Seiten navigiert, bereits vordefiniert. Über die Reihenfolge der vom Anwender aufgerufenen Seiten müssen Sie als Entwickler keinen Gedanken verlieren, denn das NavigationWindow protokolliert die aufgerufenen Seiten automatisch in einem Journal.
Innerhalb des NavigationWindow werden die Inhalte durch Page-Objekte beschrieben. Für jeden darzustellenden Inhalt müssen Sie ein Page-Objekt erstellen, das die Logik und die Steuerelemente des Inhalts beschreibt. Page ähnelt zwar in vielerlei Hinsicht dem Inhalt eines Window-Objekts, kann aber nicht ohne einen Host angezeigt werden. Daher werden Sie auch keine Eigenschaften vorfinden, die die Größe und Position eines Page-Objekts betreffen.
Das NavigationWindow wird nicht als Vorlage angeboten. Möchten Sie Ihrer Anwendung ein NavigationWindow hinzufügen, bleibt Ihnen nichts anderes übrig, als zunächst einmal ein Window-Element als Grundlage zu benutzen. Dann müssen Sie drei Punkte »von Hand« erledigen:
- Ersetzen Sie in der XAML-Datei das Stammelement Window durch NavigationWindow.
- Löschen Sie das Grid-Element in der XAML-Datei.
- Passen Sie in der Code-Behind-Datei die Basisklasse an, und ersetzen Sie auch hier Window durch NavigationWindow.
Das folgende Listing zeigt Ihnen die notwendigen Anpassungen.
// im XAML-Code
<NavigationWindow x:Class="WpfApplication1.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">
</NavigationWindow>
// in der Code-Behind-Datei
public partial class MainWindow : NavigationWindow {
public MainWindow() {
InitializeComponent();
}
}
Listing 20.5 Notwendige Änderungen, um ein »NavigationWindow« bereitzustellen
In der Entwicklungsumgebung sind noch keine Navigationsschaltflächen zu sehen. Dazu müssen Sie erst die Laufzeit starten. In Abbildung 20.2 sehen Sie die Anzeige eines NavigationWindow-Fensters zur Laufzeit, jedoch noch ohne jeglichen Inhalt.
Abbildung 20.2 Das »NavigationWindow« zur Laufzeit
20.3.1 Das »Page«-Element
Nun ist es Zeit, sich mit der Darstellung der Inhalte in einem NavigationWindow zu beschäftigen. Dazu wird ein Page-Objekt benötigt. Page wird als Vorlage angeboten, so dass Sie eine Page über das Kontextmenü des Projekts im Projektmappen-Explorer sowie die Option Hinzufügen des Projekts bereitstellen können. In der deutschsprachigen Version von Visual Studio 2012 heißt die Vorlage Seite. Dabei wird der folgende XAML-Code erzeugt:
<Page x:Class="WpfApplication1.Page1"
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
[...]
Title="Page1">
<Grid>
</Grid>
</Page>
Listing 20.6 XAML-Code der Vorlage »Seite«
Es muss jetzt die Beziehung zwischen dem NavigationWindow und der Page hergestellt werden. Dazu dient die Eigenschaft Source des NavigationWindow.
<NavigationWindow ...
Source="Page1.xaml">
</NavigationWindow>
Listing 20.7 Das »Page«-Objekt dem »NavigationWindow« bekannt geben
Ein NavigationWindow ist in der Lage, als Host für mehrere Page-Objekte seinen Dienst zu tun. Beim Starten der Anwendung wird aber automatisch die Seite aufgerufen, die unter der Eigenschaft Source eingetragen ist.
Die Page hat eine Eigenschaft Title. In der Titelleiste des NavigationWindow wird jedoch nicht der Text angezeigt, den Title beschreibt. Die Eigenschaft Title dient nur als Titelangabe in der Dropdown-Liste, die rechts neben den beiden Navigationsschaltflächen geöffnet werden kann. Um einen spezifischen Text in der Titelleiste des übergeordneten NavigationWindow anzuzeigen, verwenden Sie stattdessen die Eigenschaft WindowTitle der Seite.
Falls es notwendig ist, können Sie die Darstellungsgröße des NavigationWindow an den Inhalt der Page anpassen. Legen Sie dazu die Eigenschaften WindowHeight und WindowWidth der Seite fest. Möchten Sie mit Links oder beispielsweise Buttons selbst die Navigation in die Hand nehmen, können Sie mit
die Navigationssteuerelemente im Container ausblenden.
Es werden nur sehr wenige spezifische Informationen gespeichert, wenn eine Page zur Laufzeit der Anwendung verlassen wird. Viele Einstellungen der Seite gehen dadurch verloren. Dieses Verhalten dient der Schonung der Speicherressourcen. Andererseits kann es problematisch werden, wenn die Seite Objekte erzeugt hat, die später noch einmal verwendet werden müssen. Mit der Einstellung
lässt sich das Standardverhalten ändern (die Standardvorgabe lautet false). Die Seite wird dann komplett im Speicher gehalten. In Abschnitt 20.5.2 kommen wir auf diese Thematik noch einmal zurück.
Die bisher erwähnten Eigenschaften eines NavigationWindow sind in Tabelle 20.2 wegen des besseren Überblicks noch einmal aufgeführt.
Eigenschaft | Beschreibung |
KeepAlive |
Legt fest, ob die Seite im Speicher gehalten wird. Die Vorgabe ist false. |
ShowNavigationUI |
Legt fest, ob die Navigationsschaltflächen angezeigt werden. Die Vorgabe ist true. |
Title |
Legt den Titel der Page fest. |
WindowHeight |
Legt die Höhe des Hosts der Seite fest. |
WindowTitle |
Legt den Titel des Hosts fest. |
WindowWidth |
Legt die Breite des Hosts der Seite fest. |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.