17.3 Eine WPF-Anwendung und ihre Dateien 

Wir wollen nun ein erstes Projekt vom Typ WPF-Anwendung starten und uns zuerst die Entwicklungsumgebung ansehen. Im oberen Bereich des Code-Editors wird das Fensterdesign angezeigt, und der dazu gehörige XAML-Code erscheint darunter. Hier gestalten Sie die Oberfläche des Fensters, indem Sie Steuerelemente aus der Toolbox, die standardmäßig am linken Rand angezeigt wird, in den Designer oder alternativ direkt in den XAML-Code ziehen. Beide Fensterbereiche synchronisieren sich bei einer Änderung automatisch gegenseitig.
Werfen Sie nun einen Blick in den Projektmappen-Explorer. Hier finden Sie unter anderem mit App.xaml, App.xaml.cs, MainWindow.xaml und MainWindow.xaml.cs vier Dateien, die wir uns nun genauer ansehen.
Die Datei »MainWindow.xaml«
In dieser Datei steckt der XAML-Code des ersten Fensters, den Sie im unteren Bereich des Code-Editors sehen.
<Window 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"> <Grid> </Grid> </Window>
In der ersten Zeile wird mit x:Class="WpfApplication1.MainWindow" der Bezug zum C#-Code hergestellt. Dahinter sind mit xmlns zwei Namespaces angegeben, denen mit Title die Beschriftung der Titelleiste folgt. Height und Width geben die Ausgangsgröße des Fensters an.
Alle Steuerelemente einer WPF-Anwendung befinden sich innerhalb eines Layoutcontainers. Mit Grid wird sofort ein Vorschlag gemacht, den Sie aber nach eigenem Ermessen durch einen anderen Container ersetzen können. Die Container werden in Kapitel 18, »WPF-Containerelemente«, besprochen.
Abbildung 17.2 Die Entwicklungsumgebung einer WPF-Anwendung
Die Datei »MainWindow.xaml.cs«
MainWindow.xaml ist die Datei, in der die Oberfläche des Fensters beschrieben wird. Bei MainWindow.xaml.cs handelt es sich um die Datei, in der Sie den Programmcode schreiben. Diese Datei wird auch als Code-Behind-Datei bezeichnet. Wie üblich werden Sie hier die Ereignishandler implementieren, Eigenschaften und Felder beschreiben usw.
using System; ... namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } }
17.3.1 Die Datei »App.xaml« 

Auch zur Datei App.xaml gehört eine Code-Behind-Datei, die mit dem Attribut x:Class angegeben wird. Mit xmlns werden hier zwei Namespaces angegeben, und das Attribut StartupUri gibt an, mit welchem Fenster die Anwendung gestartet werden soll.
<Application x:Class="WpfApplication1.App" xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml StartupUri="MainWindow.xaml"> <Application.Resources> </Application.Resources> </Application>
Im Bereich zwischen dem einleitenden Tag <Application.Resources> und dem ausleitenden </Application.Resources> können Sie anwendungsweit bekannte Ressourcen eintragen. Das ist ein Thema, dem wir uns in Kapitel 20, »Konzepte der WPF«, widmen werden.
17.3.2 Die Datei »App.xaml.cs« 

Bei App.xaml.cs handelt es sich um die erwähnte Code-Behind-Datei zu App.xaml. Sie definiert die Klasse App, die von Application abgeleitet ist, und weist noch keinen Code auf. Die Klasse App veröffentlicht Eigenschaften und löst Ereignisse aus, auf die Sie hier reagieren können.
using System; ... namespace WpfApplication1 { public partial class App : Application { } }
17.3.3 Die Dateien ».baml« und ».g.cs« 

Wenn Sie zum Beispiel nach dem Starten aus der Entwicklungsumgebung heraus die WPF-Anwendung kompiliert haben, werden Sie im Ordner \obj\Debug Dateien finden, die die Endung.baml und .g.cs haben. Bei den .baml-Dateien (Binary Application Markup Language) handelt es sich um binäre Ausgaben der einzelnen XAML-Dateien. Sie werden als Ressourcen in die Anwendung gelinkt.
Für jedes Fenster wird eine eigene .g.cs-Datei erzeugt. Dabei handelt es sich um eine Klassendefinition in der jeweiligen Programmiersprache. Dateien dieses Typs stellen somit den Zusammenhang zwischen den XAML-Komponenten und der jeweiligen Klasse her.