Résumé du chapitre 7. XAML et code
Remarque
Ce livre a été publié au printemps 2016 et n’a pas été mis à jour depuis. Il y a beaucoup dans le livre qui reste précieux, mais certains documents sont obsolètes, et certains sujets ne sont plus entièrement corrects ou complets.
Xamarin.Forms prend en charge un langage de balisage XML appelé Extensible Application Markup Language ou XAML (prononcé « zammel »). XAML offre une alternative à C# dans la définition de la disposition de l’interface utilisateur d’une Xamarin.Forms application et dans la définition de liaisons entre les éléments de l’interface utilisateur et les données sous-jacentes.
Propriétés et attributs
Xamarin.Forms les classes et les structures deviennent des éléments XML en XAML, et les propriétés de ces classes et structures deviennent des attributs XML. Pour être instanciée en XAML, une classe doit généralement avoir un constructeur sans paramètre public. Toutes les propriétés définies en XAML doivent avoir des accesseurs publics set
.
Pour les propriétés des types de données de base (string
, double
et bool
ainsi de suite), l’analyseur XAML utilise les méthodes standard TryParse
pour convertir les paramètres d’attribut en ces types. L’analyseur XAML peut également facilement gérer les types d’énumération et combiner des membres d’énumération si le type d’énumération est marqué avec l’attribut Flags
.
Pour aider l’analyseur XAML, des types plus complexes (ou des propriétés de ces types) peuvent inclure une TypeConverterAttribute
classe qui identifie une classe qui dérive de TypeConverter
laquelle prend en charge la conversion de valeurs de chaîne vers ces types. Par exemple, les ColorTypeConverter
noms de couleurs et les chaînes, tels que « #rrggbb », sont convertis en Color
valeurs.
Syntaxe de l’élément Property
En XAML, les classes et les objets créés à partir d’eux sont exprimés en tant qu’éléments XML. Il s’agit d’éléments d’objet. La plupart des propriétés de ces objets sont exprimées sous forme d’attributs XML. Ces attributs sont appelés attributs de propriété.
Parfois, une propriété doit être définie sur un objet qui ne peut pas être exprimé sous la forme d’une chaîne simple. Dans ce cas, XAML prend en charge une balise appelée élément de propriété qui se compose du nom de classe et du nom de propriété séparés par un point. Un élément objet peut ensuite apparaître dans une paire de balises d’élément de propriété.
Ajout d’une page XAML à votre projet
Une Xamarin.Forms bibliothèque de classes portable peut contenir une page XAML lors de sa création, ou vous pouvez ajouter une page XAML à un projet existant. Dans la boîte de dialogue pour ajouter un nouvel élément, choisissez l’élément qui fait référence à une page XAML ou ContentPage
au code XAML. (Pas un ContentView
.)
Remarque
Les options de Visual Studio ont changé depuis l’écriture de ce chapitre.
Deux fichiers sont créés : un fichier XAML avec l’extension de nom de fichier .xaml et un fichier C# avec l’extension .xaml.cs. Le fichier C# est souvent appelé code-behind du fichier XAML. Le fichier code-behind est une définition de classe partielle qui dérive de ContentPage
. Au moment de la génération, le code XAML est analysé et une autre définition de classe partielle est générée pour la même classe. Cette classe générée inclut une méthode nommée InitializeComponent
appelée à partir du constructeur du fichier code-behind.
Pendant l’exécution, à la fin de l’appel InitializeComponent
, tous les éléments du fichier XAML ont été instanciés et initialisés comme s’ils avaient été créés dans le code C#.
L’élément racine du fichier XAML est ContentPage
. La balise racine contient au moins deux déclarations d’espace de noms XML, une pour les Xamarin.Forms éléments et l’autre définissant un x
préfixe pour les éléments et les attributs intrinsèques à toutes les implémentations XAML. La balise racine contient également un x:Class
attribut qui indique l’espace de noms et le nom de la classe qui dérive de ContentPage
. Cela correspond à l’espace de noms et au nom de la classe dans le fichier code-behind.
La combinaison de code et XAML est illustrée par l’exemple CodePlusXaml .
Compilateur XAML
Xamarin.Forms a un compilateur XAML, mais son utilisation est facultative en fonction de l’utilisation d’un XamlCompilationAttribute
. Si le code XAML n’est pas compilé, le code XAML est analysé au moment de la génération et le fichier XAML est incorporé dans la bibliothèque PCL, où il est également analysé au moment de l’exécution. Si le code XAML est compilé, le processus de génération convertit le code XAML en formulaire binaire et le traitement du runtime est plus efficace.
Spécificité de la plateforme dans le fichier XAML
En XAML, la classe peut être utilisée pour sélectionner le balisage dépendant de la OnPlatform
plateforme. Il s’agit d’une classe générique et doit être instanciée avec un x:TypeArguments
attribut qui correspond au type cible. La OnIdiom
classe est similaire mais utilisée beaucoup moins souvent.
L’utilisation a OnPlatform
changé depuis la publication du livre. Elle a été utilisée à l’origine conjointement avec les propriétés nommées iOS
, Android
et WinPhone
. Il est maintenant utilisé avec des objets enfants On
. Définissez la Platform
propriété sur une chaîne cohérente avec les champs publics const
de la Device
classe. Définissez la Value
propriété sur une valeur cohérente avec l’attribut x:TypeArguments
de la OnPlatform
balise.
OnPlatform
est illustré dans l’exemple ScaryColorList , ainsi appelé, car il contient des blocs de XAML presque identiques. L’existence de ce balisage répétitoire suggère que les techniques devraient être disponibles pour la réduire.
Attributs de propriété de contenu
Certains éléments de propriété se produisent assez fréquemment, tels que la <ContentPage.Content>
balise sur l’élément racine d’un ContentPage
, ou la <StackLayout.Children>
balise qui entoure les enfants de StackLayout
.
Chaque classe est autorisée à identifier une propriété avec une ContentPropertyAttribute
sur la classe. Pour cette propriété, les balises d’élément de propriété ne sont pas requises. ContentPage
définit sa propriété de contenu en tant que Content
, et Layout<T>
(la classe à partir de laquelle StackLayout
dérive) définit sa propriété de contenu comme Children
. Ces balises d’élément de propriété ne sont pas requises.
L’élément de propriété de l’objet Label
est Text
.
Texte mis en forme
L’exemple TextVariations contient plusieurs exemples de définition des propriétés et FormattedText
des Text
propriétés de Label
. En XAML, Span
les objets apparaissent en tant qu’enfants de l’objet FormattedString
.
Lorsqu’une chaîne multiligne est définie sur la Text
propriété, les caractères de fin de ligne sont convertis en caractères d’espace, mais les caractères de fin de ligne sont conservés lorsqu’une chaîne multiligne apparaît en tant que contenu du ou Label.Text
des Label
balises :