TOC

This article has been localized into German by the community.

XAML:

Grundlegendes zu XAML

Im vorhergehenden Kapitel haben wir darüber gesprochen was XAML ist und für was man es verwenden kann, aber wie erzeugt man ein Control in XAML? Wie du beim nächsten Beispiel sehen wirst, ist es dazu lediglich notwendig den Namen des Controls umgeben von eckigen Klammern zu schreiben. Ein Knopf zum Beispiel wird so erzeugt:

<Button>

XAML-Tags müssen immer beendet werden, entweder durch das Schreiben eines End-Tags oder indem man einen Vorwärts-Slash ans Ende des Start-Tags setzt.

<Button></Button>

oder

<Button />

Viele Controls ermöglichen es zwischen dem Start- und dem Endtag Inhalte anzugeben, die dann als Inhalt des Controls angezeigt werden. Das Knopfcontrol erlaubt zum Beispiel zwischen dem Start- und dem Endtag den Text anzugeben, der anschliessend auf ihm gezeigt wird.

<Button>A button</Button>

HTML ist nicht case-sensitive (Gross-Kleinschreibung spielt keine Rolle), aber XAML schon, da der Name eines Tags eigentlich den Namen einer entsprechenden Klasse innerhalb des .NET-Frameworks angibt. Das gleiche gilt auch für Attribute, bei denen es sich um Eigenschaften des Typs handelt. Hier ist ein Knopf, bei dem wir einige Eigenschaften definieren, indem wir Attribute zum Tag hinzufügen:

<Button FontWeight="Bold" Content="A button" />

Wir setzen das FontWeight-Property (Textstärke), wodurch wir fetten Text erhalten, und wir setzten das Content-Property was das gleiche Ergebnis hat, wie Text zwischen dem Start- und dem Endtag zu schreiben. Alle Attribute eines Controls können aber auch wie unten stehend gesetzt werden, also als Kindtags des Hauptcontrols. Diese Schreibweise wird Control-Dot-Property Notation genannt.

<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>A button</Button.Content>
</Button>

Das Ergebnis ist genau das gleiche wie oben, in diesem Fall geht es also nur um die Syntax und um nichts anderes. Eine Menge Controls erlauben aber auch anderen Inhalt als Text, sie können zum Beispiel andere Controls enthalten. Hier haben wir ein Beispiel bei dem wir Text in mehreren Farben anzeigen, indem wir mehrere TextBlock-Controls innerhalb eines Knopfs verwenden:

<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>
        <WrapPanel>
            <TextBlock Foreground="Blue">Multi</TextBlock>
            <TextBlock Foreground="Red">Color</TextBlock>
            <TextBlock>Button</TextBlock>
        </WrapPanel>
    </Button.Content>
</Button>

Das Content Property eines Knopfs erlaubt nur ein Kindelement, deshalb verwenden wir ein WrapPanel, das die unterschiedlich eingefärbten Textblöcke enthält. Panels wie das WrapPanel spielen eine wichtige Rolle in WPF und wir werden sie später wesentlich detailierter betrachten - betrachte sie momentan noch einfach nur als Container für ander Controls.

Das genau gleiche Resultat kann man mit dem folgenden Markup erzeugen. Es ist nur ein etwas anderer Weg, das gleiche wie oben zu schreiben.

<Button FontWeight="Bold">
    <WrapPanel>
        <TextBlock Foreground="Blue">Multi</TextBlock>
        <TextBlock Foreground="Red">Color</TextBlock>
        <TextBlock>Button</TextBlock>
    </WrapPanel>
</Button>

Code im Vergleich zu XAML

Hoffentlich haben dir die vorhergehenden Beispiele gezeigt, dass XAML einfach zu schreiben ist, es aber eine Menge unterschiedlicher Wege gibt das gleiche zu schreiben, und falls du denkst, dass das obere Beispiel sehr viel Text benötigt, bloss um einen Knopf mit Text in verschiedenen Farben zu erzeugen, dann versuche doch es mit dem benötigten Code in C# zu vergleichen:

Button btn = new Button();
btn.FontWeight = FontWeights.Bold;

WrapPanel pnl = new WrapPanel();

TextBlock txt = new TextBlock();
txt.Text = "Multi";
txt.Foreground = Brushes.Blue;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Color";
txt.Foreground = Brushes.Red;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Button";
pnl.Children.Add(txt);

btn.Content = pnl;
pnlMain.Children.Add(btn);

Natürlich könnte das obige Beispiel etwas weniger explizit und mit etwas mehr syntaktischer Spielerei geschrieben werden, aber ich denke es gilt nach wie vor: XAML ist ziemlich einfach und übersichtlich um Oberflächen zu beschreiben.