Nach der Einführung in Xamarin.Forms im vorherigen Artikel stehen in diesem und den folgenden Artikeln technische Details im Vordergrund. Den Anfang macht XAML.
Xamarin.Forms bietet neben der UI-Generierung durch C# Code auch XAML-Unterstützung an. Seit der Version 1.3 mit der Einführung zahlreicher XAML-Features (Styles, Triggers, etc.) macht die XAML-Verwendung in einem Xamarin.Forms Projekt erstmalig Sinn. Dieser Artikel zeigt die Gemeinsamkeiten und Unterschiede zwischen Xamarin.Forms XAML und Microsoft XAML auf.
Toolunterstützung
Sowohl WPF-Entwickler als auch Windows Store App-Entwickler befinden sich in der komfortablen Situation, dass ihnen mehrere Tools zum Designen der XAML-Views zur Verfügung stehen: der XAML-Designer in Visual Studio als auch Blend. Für die XAML-Entwicklung mit Xamarin.Forms gibt es (noch) keinen Designer.
Standardmäßig bietet Visual Studio auch keine IntelliSense Unterstützung für Xamarin.Forms XAML an, im Xamarin Studio steht es jedoch zur Verfügung. Für Visual Studio gibt es aber die Möglichkeit die IntelliSense Unterstützung für Xamarin.Forms XAML nachzurüsten: entweder durch Verwendung von ReSharper 9 von JetBrains oder durch die kostenlose Xamarin.Forms Intellisense Extension.
Gemeinsame Sprachfeatures
Prinzipiell orientiert sich Xamarin.Forms XAML an den Konzepten von Microsoft XAML. Die folgende Liste zeigt eine Auswahl von gemeinsamen Features:
- XAML Datei mit zugehöriger Partial Class mit Code-Behind
- StaticResource und ResourceDictionary
- Data Binding, Data Templates und IValueConverter
- …
Unterschiedliche Bezeichnungen für Controls
Da Xamarin.Forms eine plattformübergreifende Abstraktionsebene gegenüber den nativen Controls darstellt, verwendet Xamarin.Forms eigene Begriffe dafür:
Xamarin.Forms | Windows Store App |
---|---|
StackLayout | StackPanel |
Label | TextBlock |
Entry | TextBox |
… | … |
Eine Übersicht über alle von Xamarin.Forms angebotenen Controls findet man hier.
Unterschiede im Layout: Padding statt Margin
Xamarin.Forms Controls bieten keine Margin Property, um einen äußeren Rand zu definieren. Stattdessen kapselt man das Control in ein ContentView-Element und setzt von diesem die Padding Property entsprechend. Dadurch “simuliert” man einen äußeren Rand um das gekapselte Control. Durch die Nutzung des zusätzlichen Controls wird allerdings die Performance negativ beeinflusst.
Abhilfe kann aber auch schon die Nutzung der Spacing Property eines Containers (z. B. StackLayout) schaffen. Es definiert den Abstand von enthaltenen Kind-Elementen untereinander. Ein Grid Control bietet hier im speziellen für die Abstände zwischen Zeilen und Spalten die Properties RowSpacing und ColumnSpacing. Mehr Details dazu sowie Codebeispiele findet man hier.
Fehlende Features
Xamarin.Forms XAML bietet zwar Unterstützung für Data Templates an, es fehlt jedoch ein DataTemplateSelector. Oren Novotny hat hierfür eine einfache Lösung implementiert, welche wir auch in dem aktuellen Xamarin.Forms Projekt eingesetzt haben.
Ähnlich verhält es sich beim Data Binding mit Listen von Elementen. Xamarin.Forms bietet zwar das ListView-Control an, in manchen Situationen ist jedoch ein generischeres Control notwendig. Hierfür bietet sich der RepaterView aus dem Xamarin Forms Labs Open Source Project an.
Fazit
Im Vergleich zu den XAML-Features von Windows Store Apps oder gar WPF befindet sich das Xamarin.Forms XAML noch in den Kinderschuhen. Wenn man aber bedenkt, dass die API noch nicht einmal ein Jahr alt ist und es schon mehrere wichtige Releases gab, kann man davon ausgehen, dass immer mehr XAML-Features umgesetzt werden. Außerdem stellt Xamarin.Forms die einzige Möglichkeit dar unter Wiederverwendung seines vorhanden C# und XAML Knowhows native Apps für die Android und iOS Plattform zu entwickeln.
Sie sehen gerade einen Platzhalterinhalt von Facebook. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Instagram. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen