Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Manche Eigenschaften eines .xaml-Dokuments sind sehr flexibel. Für die Eigenschaft Margin beispielsweise können Sie ganz verschiedenen Werte angeben – zum Beispiel einfach den Wert 5, um Abstände in alle vier Richtungen zu erhalten oder auch die Zeichenkette 5,0,5,0, um nur einen linken und einen rechten Abstand abzubilden. Auch andere Eigenschaften nehmen durchaus unterschiedliche Werte entgegen, zum Beispiel solche zur Angabe von Farben. Wenn man genauer hinsieht, stellt man schnell fest, dass man da Attributen, die völlig anderen Typs sind, ein String-Literal zuweist. Warum das hier gelingt, beschreibt der vorliegende Artikel.
Type Converter am Beispiel von Abständen
Ein Beispiel für die Angabe eines Strings für ein Attribut mit einem anderen Datentyp als String ist das Attribut Margin.
Wenn wir einmal einen Button nur mit einem Rand ausstatten, der laut unserer Angabe den Abstand 5 von der linken und rechten und den Abstand 10 von der oberen und unteren Kante des übergeordneten Elements aufweist, dann erhalten wir einen Button wie in Bild 1. Der Code sieht indes so aus:
Bild 1: Ein Button-Element mit verschiedenen Margin-Werten
<Button Margin="5,10,5,10">
Wenn Sie im .xaml-Code einmal mit der rechten Maustaste auf das Attribut Margin klicken und dann den Eintrag Gehe zu Definition aus dem Kontextmenü auswählen, erscheint der Dialog aus Bild 2. Hier wird schnell deutlich, dass Margin keinesfalls den Datentyp String aufweist, sondern vielmehr den Datentyp System.Windows.Thickness. Wir müssten dieser Eigenschaft also normalerweise eine Struktur des Typs Thickness übergeben! Diese Struktur weist wiederum die vier Eigenschaften Bottom, Left, Right und Top auf.
Bild 2: Definition der Eigenschaft Margin
Margin unter C#
Um zu verdeutlichen, dass wir hier grundsätzlich einen nicht passenden Wert übergeben, wenn wir einen Zahlenwert oder auch einen String wie 5,10,5,10 angeben, schauen wir uns das Anlegen eines Buttons mit dieser Eigenschaft unter C# an.